最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年09月07日 17:10:25   作者:我是小白呀  
這篇文章主要由淺入深學(xué)習(xí)的講解TensorFlow MNIST 數(shù)據(jù)集,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

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

LeNet 模型介紹

LeNet 網(wǎng)絡(luò)最早由紐約大學(xué)的 Yann LeCun 等人于 1998 年提出, 也稱(chēng) 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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

云安县| 廉江市| 越西县| 双鸭山市| 西藏| 宽城| 资源县| 建水县| 湟中县| 济南市| 满城县| 维西| 绥江县| 顺昌县| 通河县| 吴江市| 沙坪坝区| 德保县| 临洮县| 南和县| 焉耆| 波密县| 黄骅市| 务川| 分宜县| 眉山市| 桦甸市| 延吉市| 邵阳县| 监利县| 乐安县| 营口市| 宾川县| 炉霍县| 天台县| 松阳县| 延川县| 拜泉县| 永顺县| 巴马| 漳浦县|