深度学习笔记-----基于TensorFlow2.2.0代码练习(第三课&第四课)

写在正文之前:
这篇紧接着上一篇的博文
深度学习笔记-----基于TensorFlow2.2.0代码练习(第二课)
主要写的是TensorFlow2.0的代码练习,跟随着[KGP Talkie的【TensorFlow 2.0】实战进阶教程]进行学习,并将其中一些不适用的代码错误进行修改。
本文跟随视频油管非常火的【TensorFlow 2.0】实战进阶教程(中英字幕+代码实战)第三课和第四课
**

正文

**

import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd #将输入转换成浮点类型数据
import matplotlib.pyplot as plt
mnist = keras.datasets.fashion_mnist 
type(mnist)#看看是不是有
module
(X_train, y_train),(X_test,y_test) = mnist.load_data()#只需要下载数据一次就行,第一次慢
X_train.shape#查看是否对的
(60000, 28, 28)
np.max(X_train)#提取训练集中最大值
255
y_train#查看标签的数值,因为其分类为10类
array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)
class_names =['top','trouser','pullover','dress','coat','sandal','shirt','sneaker','bag','ankle boot']#定义10个类别的E名称
plt.figure()#可视化
plt.imshow(X_train[1])#【】里面的数据可以自己输入随便一个画出第几个的图
plt.colorbar()#加一个颜色条

<matplotlib.colorbar.Colorbar at 0x21e0b34b5c8>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nP4p5tlv-1590051367946)(output_9_1.png)]

#将数据集归一化 即降低数据集的值
X_train = X_train/255.0
X_test = X_test/255.0
plt.figure()#可视化
plt.imshow(X_train[1])#【】里面的数据可以自己输入随便一个画出第几个的图
plt.colorbar()#加一个颜色条
#可以看出值被缩放到0到1之间
<matplotlib.colorbar.Colorbar at 0x21e1387c788>

在这里插入图片描述

# 建立使用TF模型
from tensorflow.python.keras.models import Sequential #导入训练模型
from tensorflow.python.keras.layers import Flatten,Dense#导入神经网络的第一层和第二层
#z这几行代码是没有用的
#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)])
model = Sequential()
model.add(Flatten(input_shape = (28,28)))#此行代码是将图的大小数据转换成一维的数据
model.add(Dense(128,activation = 'relu'))#定义第一层神经网络有128个单元,并且选择的激活函数是ReLu函数,也可以是其他函数性sigmoid函数
# 这里要是不懂可以查看吴恩达老师深度学习的3.6节课
model.add(Dense(10,activation = 'softmax'))#定义输出层,有10类所以输出10,激活函数是max函数
model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_2 (Flatten)          (None, 784)               0         
_________________________________________________________________
dense_4 (Dense)              (None, 128)               100480    
_________________________________________________________________
dense_5 (Dense)              (None, 10)                1290      
=================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0
_________________________________________________________________
#模型补充
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])#定义损失函数
#使用的优化器名叫AdamOptimizer,使用的损失函数是稀疏分类交叉熵

从这开始改动相比于第一课所实现的代码

history = model.fit(X_train,y_train,epochs = 10,batch_size = 10)#进行训练,epochs是显示运行多少次
#batch_size是为了让其运行精确
Epoch 1/10
60000/60000 [==============================] - 7s 123us/sample - loss: 0.4832 - acc: 0.8282
Epoch 2/10
60000/60000 [==============================] - 7s 114us/sample - loss: 0.3679 - acc: 0.8665
Epoch 3/10
60000/60000 [==============================] - 8s 127us/sample - loss: 0.3313 - acc: 0.8785
Epoch 4/10
60000/60000 [==============================] - 8s 128us/sample - loss: 0.3107 - acc: 0.8856
Epoch 5/10
60000/60000 [==============================] - 8s 131us/sample - loss: 0.2938 - acc: 0.8905
Epoch 6/10
60000/60000 [==============================] - 8s 131us/sample - loss: 0.2804 - acc: 0.8944
Epoch 7/10
60000/60000 [==============================] - 8s 139us/sample - loss: 0.2699 - acc: 0.8997
Epoch 8/10
60000/60000 [==============================] - 8s 127us/sample - loss: 0.2604 - acc: 0.9035
Epoch 9/10
60000/60000 [==============================] - 7s 123us/sample - loss: 0.2505 - acc: 0.9065
Epoch 10/10
60000/60000 [==============================] - 8s 126us/sample - loss: 0.2434 - acc: 0.9085

test_loss, test_acc = model.evaluate(X_test,y_test)#利用测试集测试训练下的模型的准确度
print(test_acc)
10000/10000 [==============================] - 0s 23us/sample - loss: 0.3213 - acc: 0.8835
0.8835
#测试的准确率低于训练的准确率表明模型是过度拟合
#预测模型精确度
from sklearn.metrics import accuracy_score

 y_pred = model.predict_classes(X_test)
accuracy_score(y_test,y_pred)
0.8835

第三课新的代码

绘制函数图
history.history#显示 history中储存的值
{'loss': [0.27756324788878556,
  0.26186962779764145,
  0.25036989084614714,
  0.24372021847127084,
  0.23414909314259422,
  0.22922870261633943,
  0.22273475261893327,
  0.21730233209339106,
  0.20946445644778428,
  0.20822698713549517],
 'acc': [0.89695,
  0.90316665,
  0.9069,
  0.90935,
  0.9127667,
  0.91536665,
  0.91735,
  0.91936666,
  0.921,
  0.92188334]}
#画损失和精确度值
import matplotlib.pyplot as plt
plt.plot(history.history['acc'])
plt.title('Model Accuracy')
plt.xlabel('Accuracy')
plt.ylabel('Epoch')
plt.legend(['Train','Test'], loc ='upper left')
plt.show()

plt.plot(history.history['loss'])
plt.title('Model Loss')
plt.xlabel('Loss')
plt.ylabel('Epoch')
plt.legend(['Train','Test'], loc ='upper left')
plt.show()

在这里插入图片描述

绘制Confusion矩阵

需要安装mlxtend,打开conda的cmd 输入 pip install mlxtend

from mlxtend.plotting import plot_confusion_matrix
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(y_test,y_pred)
plot_confusion_matrix(conf_mat= mat,figsize=(8,8),class_names=class_names,show_normed=True)#class_names是将标签0到9替换成文字,这是之前定义过,show_normed是显示预测的概率

在这里插入图片描述

每个格表示预测出的次数,括号里面是预测的概率,如对于top,其预测成top的概率为0.81,预测成trouser的概率为0.00

改变confusion矩阵点,点的粗细,点的大小,格式等
import matplotlib
font = {
    'family':'Times New Roman',
    'weight':'normal',
    'size':16
    
}
matplotlib.rc('font',**font)#将自己建的font传到绘图中
mat = confusion_matrix(y_test,y_pred)
plot_confusion_matrix(conf_mat= mat,figsize=(8,8),class_names=class_names,show_normed=True)

在这里插入图片描述

第四课内容

仅仅多出一个cell内容

matplotlib.rc_params()
plt.rc('font',family= 'Serif')
mat = confusion_matrix(y_test,y_pred)
fig,ax = plot_confusion_matrix(conf_mat= mat,figsize=(8,8),class_names=class_names,show_normed=True)
plt.tight_layout()
fig.savefig('cm.png')

在这里插入图片描述

第三课添加验证集

history = model.fit(X_train,y_train,epochs = 10,batch_size = 10,validation_split=0.2)#进行训练,epochs是显示运行多少次
#validation_split=0.2,将数据集的20%分为验证集
Train on 48000 samples, validate on 12000 samples
Epoch 1/10
48000/48000 [==============================] - 6s 132us/sample - loss: 0.4986 - acc: 0.8224 - val_loss: 0.4114 - val_acc: 0.8537
Epoch 2/10
48000/48000 [==============================] - 6s 125us/sample - loss: 0.3762 - acc: 0.8637 - val_loss: 0.4444 - val_acc: 0.8454
Epoch 3/10
48000/48000 [==============================] - 6s 127us/sample - loss: 0.3386 - acc: 0.8749 - val_loss: 0.3480 - val_acc: 0.8752
Epoch 4/10
48000/48000 [==============================] - 6s 133us/sample - loss: 0.3153 - acc: 0.8832 - val_loss: 0.3765 - val_acc: 0.8663
Epoch 5/10
48000/48000 [==============================] - 6s 125us/sample - loss: 0.2963 - acc: 0.8898 - val_loss: 0.3255 - val_acc: 0.8813
Epoch 6/10
48000/48000 [==============================] - 6s 129us/sample - loss: 0.2832 - acc: 0.8956 - val_loss: 0.3500 - val_acc: 0.8773
Epoch 7/10
48000/48000 [==============================] - 6s 128us/sample - loss: 0.2719 - acc: 0.8997 - val_loss: 0.3633 - val_acc: 0.8759
Epoch 8/10
48000/48000 [==============================] - 6s 128us/sample - loss: 0.2629 - acc: 0.9024 - val_loss: 0.3426 - val_acc: 0.8817
Epoch 9/10
48000/48000 [==============================] - 6s 130us/sample - loss: 0.2527 - acc: 0.9052 - val_loss: 0.3223 - val_acc: 0.8878
Epoch 10/10
48000/48000 [==============================] - 6s 126us/sample - loss: 0.2429 - acc: 0.9097 - val_loss: 0.3394 - val_acc: 0.8821

训练集模型的accuracy超过验证集表明是过拟合

history.history
{'loss': [0.49861026119586316,
  0.37618109596476035,
  0.33858689041961043,
  0.3153435294679851,
  0.2962673265104968,
  0.2831872513704972,
  0.27189580952241765,
  0.26286001327599173,
  0.25268071742318854,
  0.24288962757445764],
 'acc': [0.82239586,
  0.8637292,
  0.87485415,
  0.8832292,
  0.8898125,
  0.89558333,
  0.8996875,
  0.9023542,
  0.90522915,
  0.9097083],
 'val_loss': [0.4113784717333813,
  0.4443767974122117,
  0.3480171253090278,
  0.37646267937573913,
  0.325533945398541,
  0.34996221882950823,
  0.3633425140720404,
  0.3425569225193855,
  0.3223259873449206,
  0.33936566090870957],
 'val_acc': [0.85375,
  0.84541667,
  0.87516665,
  0.8663333,
  0.88125,
  0.87725,
  0.87591666,
  0.88175,
  0.88775,
  0.88208336]}
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Model Accuracy')
plt.xlabel('Accuracy')
plt.ylabel('Epoch')
plt.legend(['Train','Val'], loc ='upper left')
plt.show()

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss')
plt.xlabel('Loss')
plt.ylabel('Epoch')
plt.legend(['Train','Val'], loc ='upper left')
plt.show()

在这里插入图片描述
在这里插入图片描述

可以看出验证集的损失函数在下降到一定值便不再下降


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zdswyh123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值