日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

TensorFlow(6)神经网络训练(DNN)

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow(6)神经网络训练(DNN) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

Fashion MNIST數據集

一、獲取Mnist數據集

二、加載數據集

三、數據歸一化

四、設計神經網絡模型

五、模型編譯&&訓練

5-1、編譯?

5-2、訓練

六、模型評估

七、模型預測

1、?對全部測試集分類

2、獲取某一個分類的結果

3、顯示預測結果

八、防止過擬合

總代碼


Fashion MNIST數據集

?

?輸入的每個值經過每一個神經元。

一、獲取Mnist數據集

# 1、獲取Fashion Mnist數據集
mnist = tf.keras.datasets.fashion_mnist
print(mnist)

二、加載數據集

# 2、加載數據集
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 查看數據集
import matplotlib.pyplot as plt
print(training_images)
print(training_labels)
print(test_images)
print(test_labels)
plt.imshow(training_images[0])

三、數據歸一化

數據歸一化,把數據區間定位到[0,1]。

# 3、數據歸一化
training_images  = training_images / 255.0
test_images = test_images / 255.0
# print(training_images)
# print(test_images)

四、設計神經網絡模型

設計神經網絡模型(輸入層、隱藏層、輸出層)。

# 4、設計神經網絡模型(分類)
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)])#輸出層               輸出特征數量  激活函數

每一層神經元都需要一個激活函數 activation:告訴它們輸出什么。有很多選項,但目前只用這些(relu和softmax)。

Relu激活函數: "如果X>0返回X,否則返回0"--所以它的作用是它只把大于0的值傳遞給網絡中的下一層,小于0的也當作0。

Softmax激活函數:接收到一組值后,選擇其中最大的一個輸出。例如,上一層的輸出為[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05],Softmax就省去了你在其中尋找最大的值,并把它變成[0,0,0,0,0,1,0,0,0,0,0] **Softmax**的意思是 "如果X>0,則返回X,否則返回0" -- 所以它的作用是只把0或更大的值傳給下一層的網絡。--其目的是節省大量的編碼!

得到的模型:?

五、模型編譯&&訓練

5-1、編譯?

# 5-1、編譯
model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
#     編譯    優化器                             損失函數  交叉熵損失函數               監控
# 優化器:Adam優化算法(尋找全局最優點)
# 損失函數:交叉熵損失函數(用來評估當前訓練得到的概率分布與真實分布的差異情況)

5-2、訓練

# 5-2、訓練
model.fit(training_images, training_labels, epochs=5)
#         訓練特征集        訓練目標集        執行5次

六、模型評估

# 6、模型評估
model.evaluate(test_images, test_labels)

????????對沒有訓練過的數據測試時,可以發現,準確率有所降低,模型對于未見過的數據,可能不會像見過的數據那樣處理的那么好。

七、模型預測

1、?對全部測試集分類

# 1、得到全部分類預測
classification = model.predict(test_images)

2、獲取某一個分類的結果

# 2、獲取某一個分類的結果(最大概率值即為預測結果)
print('單圖各標簽的概率:', classification[0])
result = np.argmax(classification[0])

3、顯示預測結果

# 顯示結果
print('預測結果:', result)
print('真實結果:', test_labels[0])
plt.imshow(test_images[0])

八、防止過擬合

在訓練的過程中,不希望出現過擬合的情況

設置誤差小于0.4的時候停止訓練。?

# 定義終止訓練的函數,myCallback這個類繼承了tf.keras.callbacks.Callback
class myCallback(tf.keras.callbacks.Callback):def on_epoch_end(self,epoch,logs={}):if(logs.get('loss')<0.4):         #損失小于0.4時終止訓練print('\loss is low so cancelling training!')self.model.stop_training = True
# 5-2、訓練
model.fit(training_images, training_labels, epochs=5, callbacks=[myCallback()])
#         訓練特征集        訓練目標集        執行5次    回調函數

防止過擬合。?

總代碼

import tensorflow as tf
print(tf.__version__)# 1、獲取Fashion Mnist數據集
mnist = tf.keras.datasets.fashion_mnist
# print(mnist)# 2、加載數據集
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 查看數據集
# import matplotlib.pyplot as plt
# print(training_images)
# print(training_labels)
# print(test_images)
# print(test_labels)
# plt.imshow(training_images[0])# 3、數據歸一化
training_images  = training_images / 255.0
test_images = test_images / 255.0
# print(training_images)
# print(test_images)# 4、設計神經網絡模型(分類)
# 定義終止訓練的函數,myCallback這個類繼承了tf.keras.callbacks.Callback
class myCallback(tf.keras.callbacks.Callback):def on_epoch_end(self,epoch,logs={}):if(logs.get('loss')<0.4):         #損失小于0.4時終止訓練print('\loss is low so cancelling training!')self.model.stop_training = Truemodel = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28,28)),                      #輸入層tf.keras.layers.Dense(128, activation=tf.nn.relu), #隱藏層              神經元數量  激活函數tf.keras.layers.Dense(10, activation=tf.nn.softmax)])#輸出層               輸出特征數量  激活函數
model.build((None,90, 7))
model.summary()# 5、編譯&&訓練
# 5-1、編譯
model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])
#     編譯    優化器                             損失函數  交叉熵損失函數               監控
# 優化器:Adam優化算法(尋找全局最優點)
# 損失函數:交叉熵損失函數(用來評估當前訓練得到的概率分布與真實分布的差異情況)# 5-2、訓練
model.fit(training_images, training_labels, epochs=5, callbacks=[myCallback()])
#         訓練特征集        訓練目標集        執行5次    回調函數# 6、模型評估
model.evaluate(test_images, test_labels)# 7、模型預測
import numpy as np
import matplotlib.pyplot as plt
# 預測單圖片
# 1、得到全部分類預測
classification = model.predict(test_images)
# 2、獲取某一個分類的結果(最大概率值即為預測結果)
print('單圖各標簽的概率:', classification[0])
result = np.argmax(classification[0])
# 顯示結果
print('預測結果:', result)
print('真實結果:', test_labels[0])
plt.imshow(test_images[0])

總結

以上是生活随笔為你收集整理的TensorFlow(6)神经网络训练(DNN)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。