当前位置:   article > 正文

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

tensorflow dnn

目录

Fashion MNIST数据集

一、获取Mnist数据集

二、加载数据集

三、数据归一化

四、设计神经网络模型

五、模型编译&&训练

5-1、编译 

5-2、训练

六、模型评估

七、模型预测

1、 对全部测试集分类

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

3、显示预测结果

八、防止过拟合

总代码


Fashion MNIST数据集

 

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

一、获取Mnist数据集

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

二、加载数据集

  1. # 2、加载数据集
  2. (training_images, training_labels), (test_images, test_labels) = mnist.load_data()
  3. # 查看数据集
  4. import matplotlib.pyplot as plt
  5. print(training_images)
  6. print(training_labels)
  7. print(test_images)
  8. print(test_labels)
  9. plt.imshow(training_images[0])

三、数据归一化

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

  1. # 3、数据归一化
  2. training_images = training_images / 255.0
  3. test_images = test_images / 255.0
  4. # print(training_images)
  5. # print(test_images)

四、设计神经网络模型

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

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

每一层神经元都需要一个激活函数 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、编译 

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

5-2、训练

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

六、模型评估

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

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

七、模型预测

1、 对全部测试集分类

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

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

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

3、显示预测结果

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

八、防止过拟合

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

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

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

防止过拟合。 

总代码

  1. import tensorflow as tf
  2. print(tf.__version__)
  3. # 1、获取Fashion Mnist数据集
  4. mnist = tf.keras.datasets.fashion_mnist
  5. # print(mnist)
  6. # 2、加载数据集
  7. (training_images, training_labels), (test_images, test_labels) = mnist.load_data()
  8. # 查看数据集
  9. # import matplotlib.pyplot as plt
  10. # print(training_images)
  11. # print(training_labels)
  12. # print(test_images)
  13. # print(test_labels)
  14. # plt.imshow(training_images[0])
  15. # 3、数据归一化
  16. training_images = training_images / 255.0
  17. test_images = test_images / 255.0
  18. # print(training_images)
  19. # print(test_images)
  20. # 4、设计神经网络模型(分类)
  21. # 定义终止训练的函数,myCallback这个类继承了tf.keras.callbacks.Callback
  22. class myCallback(tf.keras.callbacks.Callback):
  23. def on_epoch_end(self,epoch,logs={}):
  24. if(logs.get('loss')<0.4): #损失小于0.4时终止训练
  25. print('\loss is low so cancelling training!')
  26. self.model.stop_training = True
  27. model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28,28)),
  28. #输入层
  29. tf.keras.layers.Dense(128, activation=tf.nn.relu),
  30. #隐藏层 神经元数量 激活函数
  31. tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
  32. #输出层 输出特征数量 激活函数
  33. model.build((None,90, 7))
  34. model.summary()
  35. # 5、编译&&训练
  36. # 5-1、编译
  37. model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
  38. # 编译 优化器 损失函数 交叉熵损失函数 监控
  39. # 优化器:Adam优化算法(寻找全局最优点)
  40. # 损失函数:交叉熵损失函数(用来评估当前训练得到的概率分布与真实分布的差异情况)
  41. # 5-2、训练
  42. model.fit(training_images, training_labels, epochs=5, callbacks=[myCallback()])
  43. # 训练特征集 训练目标集 执行5次 回调函数
  44. # 6、模型评估
  45. model.evaluate(test_images, test_labels)
  46. # 7、模型预测
  47. import numpy as np
  48. import matplotlib.pyplot as plt
  49. # 预测单图片
  50. # 1、得到全部分类预测
  51. classification = model.predict(test_images)
  52. # 2、获取某一个分类的结果(最大概率值即为预测结果)
  53. print('单图各标签的概率:', classification[0])
  54. result = np.argmax(classification[0])
  55. # 显示结果
  56. print('预测结果:', result)
  57. print('真实结果:', test_labels[0])
  58. plt.imshow(test_images[0])
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号