TensorFlow(6)神经网络训练(DNN)

目录

Fashion MNIST数据集

一、获取Mnist数据集

二、加载数据集

三、数据归一化

四、设计神经网络模型

五、模型编译&&训练

5-1、编译 

5-2、训练

六、模型评估

七、模型预测

1、 对全部测试集分类

2、获取某一个分类的结果

3、显示预测结果

八、防止过拟合

总代码


Fashion MNIST数据集

 

 输入的每个值经过每一个神经元。

一、获取Mnist数据集

# 1、获取Fashion Mnist数据集
mnist = tf.keras.datasets.fashion_mnist
print(mnist)

二、加载数据集

# 2、加载数据集
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 查看数据集
import matplotlib.pyplot as plt
print(training_images)
print(training_labels)
print(test_images)
print(test_labels)
plt.imshow(training_images[0])

三、数据归一化

数据归一化,把数据区间定位到[0,1]。

# 3、数据归一化
training_images  = training_images / 255.0
test_images = test_images / 255.0
# print(training_images)
# print(test_images)

四、设计神经网络模型

设计神经网络模型(输入层、隐藏层、输出层)

# 4、设计神经网络模型(分类)
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),                      
                                    #输入层
                                    tf.keras.layers.Dense(128, activation=tf.nn.relu), 
                                    #隐藏层              神经元数量  激活函数
                                    tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
                                    #输出层               输出特征数量  激活函数

每一层神经元都需要一个激活函数 activation:告诉它们输出什么。有很多选项,但目前只用这些(relu和softmax)。

Relu激活函数: "如果X>0返回X,否则返回0"--所以它的作用是它只把大于0的值传递给网络中的下一层,小于0的也当作0。

Softmax激活函数:接收到一组值后,选择其中最大的一个输出。例如,上一层的输出为[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05],Softmax就省去了你在其中寻找最大的值,并把它变成[0,0,0,0,0,1,0,0,0,0,0] **Softmax**的意思是 "如果X>0,则返回X,否则返回0" -- 所以它的作用是只把0或更大的值传给下一层的网络。--其目的是节省大量的编码!

得到的模型: 

五、模型编译&&训练

5-1、编译 

# 5-1、编译
model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
#     编译    优化器                             损失函数  交叉熵损失函数               监控
# 优化器:Adam优化算法(寻找全局最优点)
# 损失函数:交叉熵损失函数(用来评估当前训练得到的概率分布与真实分布的差异情况)

5-2、训练

# 5-2、训练
model.fit(training_images, training_labels, epochs=5)
#         训练特征集        训练目标集        执行5次

六、模型评估

# 6、模型评估
model.evaluate(test_images, test_labels)

        对没有训练过的数据测试时,可以发现,准确率有所降低,模型对于未见过的数据,可能不会像见过的数据那样处理的那么好。

七、模型预测

1、 对全部测试集分类

# 1、得到全部分类预测
classification = model.predict(test_images)

2、获取某一个分类的结果

# 2、获取某一个分类的结果(最大概率值即为预测结果)
print('单图各标签的概率:', classification[0])
result = np.argmax(classification[0])

3、显示预测结果

# 显示结果
print('预测结果:', result)
print('真实结果:', test_labels[0])
plt.imshow(test_images[0])

八、防止过拟合

在训练的过程中,不希望出现过拟合的情况

设置误差小于0.4的时候停止训练。 

# 定义终止训练的函数,myCallback这个类继承了tf.keras.callbacks.Callback
class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs={}):
        if(logs.get('loss')<0.4):         #损失小于0.4时终止训练
            print('\loss is low so cancelling training!')
            self.model.stop_training = True
# 5-2、训练
model.fit(training_images, training_labels, epochs=5, callbacks=[myCallback()])
#         训练特征集        训练目标集        执行5次    回调函数

防止过拟合。 

总代码

import tensorflow as tf
print(tf.__version__)

# 1、获取Fashion Mnist数据集
mnist = tf.keras.datasets.fashion_mnist
# print(mnist)

# 2、加载数据集
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 查看数据集
# import matplotlib.pyplot as plt
# print(training_images)
# print(training_labels)
# print(test_images)
# print(test_labels)
# plt.imshow(training_images[0])

# 3、数据归一化
training_images  = training_images / 255.0
test_images = test_images / 255.0
# print(training_images)
# print(test_images)

# 4、设计神经网络模型(分类)
# 定义终止训练的函数,myCallback这个类继承了tf.keras.callbacks.Callback
class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs={}):
        if(logs.get('loss')<0.4):         #损失小于0.4时终止训练
            print('\loss is low so cancelling training!')
            self.model.stop_training = True
        
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28,28)),                      
                                    #输入层
                                    tf.keras.layers.Dense(128, activation=tf.nn.relu), 
                                    #隐藏层              神经元数量  激活函数
                                    tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
                                    #输出层               输出特征数量  激活函数
model.build((None,90, 7))
model.summary()

# 5、编译&&训练
# 5-1、编译
model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
#     编译    优化器                             损失函数  交叉熵损失函数               监控
# 优化器:Adam优化算法(寻找全局最优点)
# 损失函数:交叉熵损失函数(用来评估当前训练得到的概率分布与真实分布的差异情况)

# 5-2、训练
model.fit(training_images, training_labels, epochs=5, callbacks=[myCallback()])
#         训练特征集        训练目标集        执行5次    回调函数

# 6、模型评估
model.evaluate(test_images, test_labels)

# 7、模型预测
import numpy as np
import matplotlib.pyplot as plt
# 预测单图片
# 1、得到全部分类预测
classification = model.predict(test_images)
# 2、获取某一个分类的结果(最大概率值即为预测结果)
print('单图各标签的概率:', classification[0])
result = np.argmax(classification[0])
# 显示结果
print('预测结果:', result)
print('真实结果:', test_labels[0])
plt.imshow(test_images[0])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值