Tensorflow2.1入门 第四章:神经网络“八股”功能扩展

Tensorflow2.1入门 第四章:神经网络“八股”功能扩展

  • 一、自制数据集
  • 二、数据增强(图像)
  • 三、断点续训
    • 1. 回调函数
    • 2. 保存模型
    • 3. 保存参数
  • 四、参数提取
  • 五、acc/loss可视化
  • 六、实现给图识物

一、自制数据集

  1. contents = f.readlines()
    按行读入txt文档内容
  2. value = content.split()
    根据空格分割内容,返回列表
  3. os.path.exists(filename)
    判断指定文件是否存在,返回True/False。
  4. np.save(savepath, file)/file = np.load(filepath)
    存储/读取numpy数组。
  5. 数据需要归一化!(0均值,1方差)
    对于图像来说,需要除以255使得整个图像灰度值范围映射到[0,1]之间。
  6. 要分别设置:组建数据集/已有数据集时读入数据集的操作。

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

四、参数提取

  1. 返回模型中可训练的参数
    model.trainable_variables
  2. 设置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

六、实现给图识物

  1. 通过前向传播预测结果:
    predict(输入特征,batch_size=整数)
  2. 训练集和测试集输入图片尺寸大小不一样时需要改变测试集尺寸
    img.resize((长,宽),插值方式)
    第二个参数:Image.NEAREST :低质量;Image.BILINEAR:双线性;Image.BICUBIC :三次样条插值;Image.ANTIALIAS:高质量。常用最后一个。
  3. 给张量增加维度
    如果t是二维数组,t[…,1]等价于t[:,1];如果是三维数值,t[…,1]等价于t[:,:,1]。
    img = img[tf.newaxis, ...],即可使img从(28, 28)变为(1, 28, 28),方便神经网络按照batch送入数据。

p27_mnist_app.py

你可能感兴趣的:(神经网络,python,tensorflow,深度学习,机器学习)