赞
踩
目录
输入的每个值经过每一个神经元。
- # 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、编译
- model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
- # 编译 优化器 损失函数 交叉熵损失函数 监控
- # 优化器:Adam优化算法(寻找全局最优点)
- # 损失函数:交叉熵损失函数(用来评估当前训练得到的概率分布与真实分布的差异情况)
- # 5-2、训练
- model.fit(training_images, training_labels, epochs=5)
- # 训练特征集 训练目标集 执行5次
- # 6、模型评估
- model.evaluate(test_images, test_labels)
对没有训练过的数据测试时,可以发现,准确率有所降低,模型对于未见过的数据,可能不会像见过的数据那样处理的那么好。
- # 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])
在训练的过程中,不希望出现过拟合的情况。
设置误差小于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])
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。