深度學習筆記: 深度學習Hello World! MNIST數據集,第一個深度學習流程體驗.訓練步驟過程分解!

1.導入數據,讀取數據:Datasets

2.構建神經網絡:Model層

3.編譯模型(設置怎麼訓練模式):model.compile

4.訓練模型:model.fit()

5.評估模型準確性:model.evaluate()

6.建議做的步驟:將訓練好的模型保留到本地,優秀的模型,下次可以直接從本地加載,就不用費時間再去訓練了

model.save()

model= tf.keras.models.load_model()

7.畫圖 Plot

 

代碼步驟如下:

import tensorflow as tf
import os
import numpy as np
# 畫圖
import matplotlib.pyplot as plt
# 防止Tensorflow運行GPU內存不足造成錯誤
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = "-1"  #選擇哪一塊gpu,如果是-1,就是調用cpu

config = ConfigProto()
config.allow_soft_placement=True #如果你指定的設備不存在,允許TF自動分配設備
config.gpu_options.per_process_gpu_memory_fraction=0.7  #分配百分之七十的顯存給程序使用,避免內存溢出,可以自己調整
config.gpu_options.allow_growth = True   #按需分配顯存,這個比較重要
session = InteractiveSession(config=config)


# 取消打印一些tensorflow的警告
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

# 數據處理
(x_train,y_train),(x_test,y_test) = tf.keras.datasets.mnist.load_data()
# 處理訓練數據和測試數據  -- 需要將圖片數據處理成浮點型
x_train,x_test =  x_train / 1.0, x_test / 1.0
# 將二維數據轉換層3維數據,CNN只支持三維的計算 (60000,28,28) -- >  (60000,28,28,1)  print(x_train.shape)
x_train = x_train.reshape(-1,28,28,1)
x_test  = x_test.reshape(-1,28,28,1)

# 訓練模型
model = tf.keras.models.Sequential([
    # 設置訓練模型   -- input_shape 指出輸入的形狀(samples,rows,cols,channels) ,只指出後三維即可,第一維度按batch_size自動指定
    # x_train (60000,28,28,1)  >> input_shape=(60000,28,28,1)  第一維可以省略,自動根據batch_size指定
    tf.keras.layers.Conv2D(filters=16,kernel_size=(5,5),activation="relu",input_shape=(28,28,1),padding="valid"),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),
    tf.keras.layers.Conv2D(filters=32,kernel_size=(5,5),activation="relu"),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),
    tf.keras.layers.Conv2D(filters=64,kernel_size=(3,3),activation="relu",padding="valid"),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),
    # 打平層,將三維數據打平成1維矩陣
    tf.keras.layers.Flatten(),
    # 全連接層,降維,將28*28=784一維數據轉化成最後要分類數量,如mnist數據集10類
    tf.keras.layers.Dense(256,activation="relu"),
    tf.keras.layers.Dense(128,activation="relu"),
    tf.keras.layers.Dense(64,activation="relu"),
    tf.keras.layers.Dense(32,activation="relu"),
    tf.keras.layers.Dense(10,activation="softmax")
])

# 編譯模型
model.compile(
    optimizer='adam',
    # loss=tf.keras.losses.sparse_categorical_crossentropy,
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# 訓練模型-並記錄訓練模型
his = model.fit(x_train,y_train,batch_size=128,epochs=30)

# 評估模型
test_loss,test_accurary = model.evaluate(x_test,y_test)
print(test_loss,test_accurary)
# 保存訓練模型
model.save("D:\\ResearchModel\\mnistCNN.h5")

# 如果本地有訓練好的模型,可以直接通過加載本地訓練好的model進行後續訓練
# model = tf.keras.models.load_model("D:\\ResearchModel\\mnistCNN.h5")

# 評估模型
test_loss,test_accurary = model.evaluate(x_test,y_test)
print(test_loss,test_accurary)

# 模型歸檔
model.summary()

# 畫圖
plt.plot(his.history['accuracy'])
plt.title("Accuracy Model")
plt.xlabel("Epoch")
plt.ylabel("Accuracy")
plt.legend(["accuracy"],loc="lower right")
plt.show()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章