机器学习——图像分类学习笔记

训练神经网络模型

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相差太多说明发生过拟合现象

扫描二维码关注公众号,回复: 15853042 查看本文章

查看权值

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官方学习文档

猜你喜欢

转载自blog.csdn.net/qq_43842886/article/details/111564707