这是我自己按照机器学习教学书上的讲解搭建的非常简单的模型,因为确实不是很懂,所以想知道关于这段代码所训练出来的模型(输出是.h5文件)如何添加元数据,因为我尝试导入AS报错This model does not contain associated files, and is not a Zip file.
```python
print(os.listdir(r"数据集:自己找的分好类的图片文件夹"));
dir='数据集'
——各个类——
X=[]
y_label=[]
imgsize=150
def training_data(label,data_dir):
#print("正在读入:",data_dir)
for img in os.listdir(data_dir):
path=os.path.join(data_dir,img)
img=cv2.imread(path,cv2.IMREAD_COLOR)
img=cv2.resize(img,(imgsize,imgsize))
X.append(np.array(img))
y_label.append(str(label))
——“读入各个类”——
from sklearn.preprocessing import LabelEncoder #导入标签编码工具
from keras.utils import np_utils #导入One-hot编码工具
label_encoder=LabelEncoder()
y=label_encoder.fit_transform(y_label) #标签编码
y=np_utils.to_categorical(y,10) #将标签转换为One-hot编码
X=np.array(X) #将X从列表转换为张量数组
X=X/255 #将X张量归一化
from keras.preprocessing.image import ImageDataGenerator
augs_gen=ImageDataGenerator(
featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=10,
zoom_range=0.1,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
vertical_flip=False
)
from sklearn.model_selection import train_test_split #导入拆分工具
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)
from keras import layers #导入所有层
from keras import optimizers #导入优化器
from keras import models #导入所有模型
#datas_placeholder = tf.compat.v1.placeholder(tf.float32, [None, 32, 32, 3],name='X_train')
#labels_placeholder = tf.compat.v1.placeholder(tf.int32, [None],name='y_input')
augs_gen.fit(X_train) #针对训练集拟合数据增强器
cnn=models.Sequential() #序贯模型
cnn.add(layers.Conv2D(32,(3,3),activation='relu', #卷积层
input_shape=(150,150,3)))
cnn.add(layers.MaxPool2D((2,2))) #最大池化层# 池化层,特征图大小减半
cnn.add(layers.Conv2D(64,(3,3),activation='relu'))# 卷积层,32个输出通道,3*3的卷积核,激活函数为relu
cnn.add(layers.Dropout(0.5)) #Dropout层
cnn.add(layers.MaxPool2D((2,2))) #最大池化层
cnn.add(layers.Conv2D(128,(3,3),activation='relu'))
cnn.add(layers.Dropout(0.5)) #Dropout层
cnn.add(layers.MaxPool2D((2,2))) #最大池化层
cnn.add(layers.Conv2D(128,(3,3),activation='relu'))
cnn.add(layers.Dropout(0.5)) #Dropout层
cnn.add(layers.MaxPool2D((2,2))) #最大池化层
cnn.add(layers.Flatten()) #展平层
cnn.add(layers.Dropout(0.5)) #Dropout层
cnn.add(layers.Dense(512,activation='relu')) #全连接层
cnn.add(layers.Dense(10,activation='sigmoid',)) #分类输出对应数据集具体的类别数目
cnn.compile(loss='categorical_crossentropy', #损失函数
optimizer=tensorflow.keras.optimizers.Adam(lr=1e-4), #优化器
metrics=['acc']) #评估指标
history=cnn.fit_generator(
augs_gen.flow(X_train,y_train,batch_size=16),
validation_data=(X_test,y_test),
validation_steps=40,
steps_per_epoch=100,
epochs=50, #指定轮次
verbose=1)
```