深度学习笔记: 深度学习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()

 

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