濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

熱門標(biāo)簽:南昌辦理400電話怎么安裝 哈爾濱外呼系統(tǒng)代理商 鄭州智能外呼系統(tǒng)運(yùn)營(yíng)商 電話機(jī)器人適用業(yè)務(wù) 湛江電銷防封卡 佛山防封外呼系統(tǒng)收費(fèi) 徐州天音防封電銷卡 獲客智能電銷機(jī)器人 不錯(cuò)的400電話辦理

MNIST 數(shù)據(jù)集介紹

MNIST 包含 0~9 的手寫數(shù)字, 共有 60000 個(gè)訓(xùn)練集和 10000 個(gè)測(cè)試集. 數(shù)據(jù)的格式為單通道 28*28 的灰度圖.

LeNet 模型介紹

LeNet 網(wǎng)絡(luò)最早由紐約大學(xué)的 Yann LeCun 等人于 1998 年提出, 也稱 LeNet5. LeNet 是神經(jīng)網(wǎng)絡(luò)的鼻祖, 被譽(yù)為卷積神經(jīng)網(wǎng)絡(luò)的 “Hello World”.

卷積

池化 (下采樣)

激活函數(shù) (ReLU)

LeNet 逐層分析

1. 第一個(gè)卷積層

2. 第一個(gè)池化層

3. 第二個(gè)卷積層

4. 第二個(gè)池化層

5. 全連接卷積層

6. 全連接層

7. 全連接層 (輸出層)

代碼實(shí)現(xiàn)

導(dǎo)包

from tensorflow.keras.datasets import mnist
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf

讀取 查看數(shù)據(jù)

# ------------------1. 讀取  查看數(shù)據(jù)------------------

# 讀取數(shù)據(jù)
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 數(shù)據(jù)集查看
print(X_train.shape)  # (60000, 28, 28)
print(y_train.shape)  # (60000,)
print(X_test.shape)  # (10000, 28, 28)
print(y_test.shape)  # (10000,)
print(type(X_train))  # class 'numpy.ndarray'>

# 圖片顯示
plt.imshow(X_train[0], cmap="Greys")  # 查看第一張圖片
plt.show()

數(shù)據(jù)預(yù)處理

# ------------------2. 數(shù)據(jù)預(yù)處理------------------

# 格式轉(zhuǎn)換 (將圖片從28*28擴(kuò)充為32*32)
X_train = np.pad(X_train, ((0, 0), (2, 2), (2, 2)), "constant", constant_values=0)
X_test = np.pad(X_test, ((0, 0), (2, 2), (2, 2)), "constant", constant_values=0)
print(X_train.shape)  # (60000, 32, 32)
print(X_test.shape)  # (10000, 32, 32)

# 數(shù)據(jù)集格式變換
X_train = X_train.astype(np.float32)
X_test = X_test.astype(np.float32)

# 數(shù)據(jù)正則化
X_train /= 255
X_test /= 255

# 數(shù)據(jù)維度轉(zhuǎn)換
X_train = np.expand_dims(X_train, axis=-1)
X_test = np.expand_dims(X_test, axis=-1)
print(X_train.shape)  # (60000, 32, 32, 1)
print(X_test.shape)  # (10000, 32, 32, 1)

模型建立

# 第一個(gè)卷積層
conv_layer_1 = tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding="valid", activation=tf.nn.relu)
# 第一個(gè)池化層
pool_layer_1 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), padding="same")
# 第二個(gè)卷積層
conv_layer_2 = tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding="valid", activation=tf.nn.relu)
# 第二個(gè)池化層
pool_layer_2 = tf.keras.layers.MaxPool2D(padding="same")
# 扁平化
flatten = tf.keras.layers.Flatten()
# 第一個(gè)全連接層
fc_layer_1 = tf.keras.layers.Dense(units=120, activation=tf.nn.relu)
# 第二個(gè)全連接層
fc_layer_2 = tf.keras.layers.Dense(units=84, activation=tf.nn.softmax)
# 輸出層
output_layer = tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)

卷積 Conv2D 的用法:

  • filters: 卷積核個(gè)數(shù)
  • kernel_size: 卷積核大小
  • strides = (1, 1): 步長(zhǎng)
  • padding = “vaild”: valid 為舍棄, same 為補(bǔ)齊
  • activation = tf.nn.relu: 激活函數(shù)
  • data_format = None: 默認(rèn) channels_last

池化 AveragePooling2D 的用法:

  • pool_size: 池的大小
  • strides = (1, 1): 步長(zhǎng)
  • padding = “vaild”: valid 為舍棄, same 為補(bǔ)齊
  • activation = tf.nn.relu: 激活函數(shù)
  • data_format = None: 默認(rèn) channels_last

全連接 Dense 的用法:

  • units: 輸出的維度
  • activation: 激活函數(shù)
  • strides = (1, 1): 步長(zhǎng)
  • padding = “vaild”: valid 為舍棄, same 為補(bǔ)齊
  • activation = tf.nn.relu: 激活函數(shù)
  • data_format = None: 默認(rèn) channels_last
# 模型實(shí)例化
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='valid', activation=tf.nn.relu,
                           input_shape=(32, 32, 1)),
    # relu
    tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
    tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding='valid', activation=tf.nn.relu),
    tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(units=120, activation=tf.nn.relu),

    tf.keras.layers.Dense(units=84, activation=tf.nn.relu),
    tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)
])

# 模型展示
model.summary()

輸出結(jié)果:

訓(xùn)練模型

# ------------------4. 訓(xùn)練模型------------------

# 設(shè)置超參數(shù)
num_epochs = 10  # 訓(xùn)練輪數(shù)
batch_size = 1000  # 批次大小
learning_rate = 0.001  # 學(xué)習(xí)率
# 定義優(yōu)化器
adam_optimizer = tf.keras.optimizers.Adam(learning_rate)
model.compile(optimizer=adam_optimizer,loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=['accuracy'])

complie 的用法:

  • optimizer: 優(yōu)化器
  • loss: 損失函數(shù)
  • metrics: 評(píng)價(jià)
with tf.Session() as sess:
    # 初始化所有變量
    init = tf.global_variables_initializer()
    sess.run(init)

    model.fit(x=X_train,y=y_train,batch_size=batch_size,epochs=num_epochs)

    # 評(píng)估指標(biāo)
    print(model.evaluate(X_test, y_test))  # loss value  metrics values

輸出結(jié)果:

fit 的用法:

  • x: 訓(xùn)練集
  • y: 測(cè)試集
  • batch_size: 批次大小
  • enpochs: 訓(xùn)練遍數(shù)

保存模型

# ------------------5. 保存模型------------------
model.save('lenet_model.h5')

流程總結(jié)

完整代碼

from tensorflow.keras.datasets import mnist
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf

# ------------------1. 讀取  查看數(shù)據(jù)------------------

# 讀取數(shù)據(jù)
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 數(shù)據(jù)集查看
print(X_train.shape)  # (60000, 28, 28)
print(y_train.shape)  # (60000,)
print(X_test.shape)  # (10000, 28, 28)
print(y_test.shape)  # (10000,)
print(type(X_train))  # class 'numpy.ndarray'>

# 圖片顯示
plt.imshow(X_train[0], cmap="Greys")  # 查看第一張圖片
plt.show()

# ------------------2. 數(shù)據(jù)預(yù)處理------------------

# 格式轉(zhuǎn)換 (將圖片從28*28擴(kuò)充為32*32)
X_train = np.pad(X_train, ((0, 0), (2, 2), (2, 2)), "constant", constant_values=0)
X_test = np.pad(X_test, ((0, 0), (2, 2), (2, 2)), "constant", constant_values=0)
print(X_train.shape)  # (60000, 32, 32)
print(X_test.shape)  # (10000, 32, 32)

# 數(shù)據(jù)集格式變換
X_train = X_train.astype(np.float32)
X_test = X_test.astype(np.float32)

# 數(shù)據(jù)正則化
X_train /= 255
X_test /= 255

# 數(shù)據(jù)維度轉(zhuǎn)換
X_train = np.expand_dims(X_train, axis=-1)
X_test = np.expand_dims(X_test, axis=-1)
print(X_train.shape)  # (60000, 32, 32, 1)
print(X_test.shape)  # (10000, 32, 32, 1)

# ------------------3. 模型建立------------------

# 第一個(gè)卷積層
conv_layer_1 = tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding="valid", activation=tf.nn.relu)
# 第一個(gè)池化層
pool_layer_1 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), padding="same")
# 第二個(gè)卷積層
conv_layer_2 = tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding="valid", activation=tf.nn.relu)
# 第二個(gè)池化層
pool_layer_2 = tf.keras.layers.MaxPool2D(padding="same")
# 扁平化
flatten = tf.keras.layers.Flatten()
# 第一個(gè)全連接層
fc_layer_1 = tf.keras.layers.Dense(units=120, activation=tf.nn.relu)
# 第二個(gè)全連接層
fc_layer_2 = tf.keras.layers.Dense(units=84, activation=tf.nn.softmax)
# 輸出層
output_layer = tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)


# 模型實(shí)例化
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='valid', activation=tf.nn.relu,
                           input_shape=(32, 32, 1)),
    # relu
    tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
    tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding='valid', activation=tf.nn.relu),
    tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(units=120, activation=tf.nn.relu),

    tf.keras.layers.Dense(units=84, activation=tf.nn.relu),
    tf.keras.layers.Dense(units=10, activation=tf.nn.softmax)
])

# 模型展示
model.summary()

# ------------------4. 訓(xùn)練模型------------------

# 設(shè)置超參數(shù)
num_epochs = 10  # 訓(xùn)練輪數(shù)
batch_size = 1000  # 批次大小
learning_rate = 0.001  # 學(xué)習(xí)率

# 定義優(yōu)化器
adam_optimizer = tf.keras.optimizers.Adam(learning_rate)
model.compile(optimizer=adam_optimizer,loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=['accuracy'])


with tf.Session() as sess:
    # 初始化所有變量
    init = tf.global_variables_initializer()
    sess.run(init)

    model.fit(x=X_train,y=y_train,batch_size=batch_size,epochs=num_epochs)

    # 評(píng)估指標(biāo)
    print(model.evaluate(X_test, y_test))  # loss value  metrics values

# ------------------5. 保存模型------------------
model.save('lenet_model.h5')

到此這篇關(guān)于由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集的文章就介紹到這了,更多相關(guān)TensorFlow MNIST 數(shù)據(jù)集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • TensorFlow 實(shí)戰(zhàn)之實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的實(shí)例講解
  • PyTorch上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN的方法
  • CNN的Pytorch實(shí)現(xiàn)(LeNet)
  • Python深度學(xué)習(xí)pytorch卷積神經(jīng)網(wǎng)絡(luò)LeNet

標(biāo)簽:呂梁 紹興 蘭州 安康 吉安 廣西 懷化 蕪湖

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集》,本文關(guān)鍵詞  由淺入深,學(xué)習(xí),TensorFlow,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    银川市| 乐平市| 韶山市| 甘泉县| 杭锦后旗| 靖宇县| 尖扎县| 岑巩县| 富顺县| 营口市| 河北省| 库尔勒市| 上高县| 长岛县| 新晃| 闸北区| 南部县| 怀远县| 宁化县| 偏关县| 永安市| 新野县| 花莲县| 万荣县| 木兰县| 望奎县| 六安市| 安阳县| 合肥市| 靖宇县| 临沧市| 张掖市| 澄迈县| 扬州市| 黑山县| 台湾省| 文成县| 景洪市| 吉木乃县| 晋江市| 林州市|