Tensorflow2.1入门 第四章:神经网络“八股”功能扩展
一、自制数据集
contents = f.readlines()
按行读入txt文档内容value = content.split()
根据空格分割内容,返回列表os.path.exists(filename)
判断指定文件是否存在,返回True/False。np.save(savepath, file)/file = np.load(filepath)
存储/读取numpy数组。- 数据需要归一化!(0均值,1方差)
对于图像来说,需要除以255使得整个图像灰度值范围映射到[0,1]之间。 - 要分别设置:组建数据集/已有数据集时读入数据集的操作。
p8_mnist_train_ex1.py
二、数据增强(图像)
image_gen_train = tf.keras.preprocessing.image.ImageDataGenerator(
rescale = 所有数据将乘以该数值,
rotation_range = 随机旋转角度数范围,
width_shift_range = 随机宽度偏移量,
height_shift_range = 随机高度偏移量,
horizontal = 是否随机水平翻转,
zoom_range = 随机缩放的范围[1-n, 1+n] )
fit方法从model.fit(x_train, y_train, batch_size=32, …)
变为model.fit(image_gen_train.flow(x_train, y_train, batch_size=32), …)
p11_show_augmented _images.py
p13_mnist_train_ex2.py
三、断点续训
1. 回调函数
cp_callback = tf.keras.callbacks.ModelCheckpoint(
filepath = 路径文件名,
save_weights_only = True/False #是否仅保存参数
save_best_only = True/False)
history = model.fit(callbacks=[cp_callback])
2. 保存模型
将save_weights_only参数选为False或不填(即默认False)。
读取模型:load_model(路径文件名)
优点: 本身自带模型结构;
缺点: 占据存储空间大。
3. 保存参数
将save_weights_only参数选为True,这样就会仅保留参数而无模型信息。
读取参数:load_weights(路径文件名)
优点: 占据存储空间小;
缺点: 需要先描述一遍网络结构才可以导入参数,而且如果模型不一样硬要导入参数会报错。
p16_mnist_train_ex3.py
四、参数提取
- 返回模型中可训练的参数
model.trainable_variables
- 设置print输出格式
np.set_printoptions(threshold=超过多少省略显示) #threshold设为np.inf则为无穷大
print(model.trainable_variables)
file = open('./weights.txt','w')
for v in model.trainable_variables:
file.write(str(v.name) + '\n')
file.write(str(v.shape) + '\n')
file.write(str(v.numpy()) + '\n')
file.close()
p19_mnist_train_ex4.py
五、acc/loss可视化
history = model.fit(训练集数据, 训练集标签, batch_size=, epochs=,
validation_split=用作测试数据的比例,
validation_data=测试集,
validation_freq=测试频率)
acc = history.history['sparse_categorical_accuracy'] #训练集准确率
val_acc = history.history['val_sparse_categorical_accuracy'] #测试集准确率
loss = history.history['loss'] #训练集loss
val_loss = history.history['val_loss'] #测试集loss
p23_mnist_train_ex5.py
六、实现给图识物
- 通过前向传播预测结果:
predict(输入特征,batch_size=整数)
- 训练集和测试集输入图片尺寸大小不一样时需要改变测试集尺寸
img.resize((长,宽),插值方式)
第二个参数:Image.NEAREST :低质量;Image.BILINEAR:双线性;Image.BICUBIC :三次样条插值;Image.ANTIALIAS:高质量。常用最后一个。 - 给张量增加维度
如果t是二维数组,t[…,1]等价于t[:,1];如果是三维数值,t[…,1]等价于t[:,:,1]。
img = img[tf.newaxis, ...]
,即可使img从(28, 28)变为(1, 28, 28),方便神经网络按照batch送入数据。
p27_mnist_app.py