训练神经网络模型
1、基本步骤
1、将训练数据馈送给模型。在本例中,训练数据位于 train_images 和 train_labels 数组中。
2、模型学习将图像和标签关联起来。
3、要求模型对测试集(在本例中为 test_images 数组)进行预测。
4、验证预测是否与 test_labels 数组中的标签相匹配。
2、数据预处理
查看图像信息,并使标签值变为0-1之间
#设置标签分类
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
降低标签值
train_images_scaled=train_images/255
test_images_scaled=test_images/255
3、构造神经元模型
%config IPCompleter.greedy=True #Tab键代码自动提示
方法一:
#构造神经元模型
model=keras.Sequential([
keras.layers.Flatten(input_shape=(28,28)),
#该层视为图像中未堆叠的像素行并将其排列起来。该层没有要学习的参数,它只会重新格式化数据。
keras.layers.Dense(128,activation=tf.nn.relu),
keras.layers.Dense(10,activation=tf.nn.softmax)
#它们是密集连接或全连接神经层
])
方法二:
model=keras.Sequential()
model.add( keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))
激活函数不做赘述
4、训练评估模型
model.compile
损失函数 loss- 用于测量模型在训练期间的准确率。您会希望最小化此函数,以便将模型“引导”到正确的方向上。
优化器 optimizer- 决定模型如何根据其看到的数据和自身的损失函数进行更新。
指标 metrics - 用于监控训练和测试步骤。以下示例使用了准确率,即被正确分类的图像的比率。
#训练评估模型
model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
#adam是常用优化方法
#loss选择sparse是因为此处是作类别输出
model.fit(train_images,train_labels,epochs=5) #训练
"""
callbacks=[callbacks]用于终止训练
model.fit(train_images_scaled,train_labels,epochs=5,callbacks=[callbacks])
"""
model.evaluate(test_images,test_labels) #评估模型效果
自定义callback方法
#自定义callbacks方法
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self,epoch,logs()):
if(logs.get('loss')<0.4):
print("\nloss is low so cancelling training!")
self.model.stop_training=True
callbacks=myCallback()
如果训练次数过多会发生过拟合现象
如评估得到的loss与模型得到的loss相差太多说明发生过拟合现象
查看权值
w,b = model.get_layer(index=0).weights
预测
模型具有线性输出,即 logits。可以附加一个 softmax 层,将 logits 转换成更容易理解的概率。
#预测
#附加 softmax 层
import numpy as np
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
#预测测试集中所有模型的标签
predictions = probability_model.predict(test_images_scaled)
#测试
np.argmax(predictions[0]) #查看置信度最大的标签
test_labels[0]
官方学习文件:
Tensorflow官方学习文档