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

歡迎訪問 生活随笔!

生活随笔

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

生活经验

TensorFlow(7)卷积神经网络实战(1)(可视化)

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow(7)卷积神经网络实战(1)(可视化) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

基礎理論?

卷積?

卷積核與過濾器的區別

一、獲取數據集

二、設定數據集大小、歸一化

三、構建卷積神經網絡

四、編譯&&訓練

五、模型評估?

六、可視化

1、創建plt圖?

2、獲取各卷積層

3、觀察卷積層

總代碼

卷積神經網絡?

可視化


基礎理論?

????????在實際應用中,攝像頭捕捉到的圖片,主物品往往會偏于一側的位置,甚至有角度的旋轉,這時神經網絡模型對這些圖片的分類就會不準。這時我們引入:卷積神經網絡(CNN)

????????通過卷積操作縮小了圖像的內容,將模型注意力集中在圖像特定的、明顯的特征上。

????????這種計算對于計算機視覺來說是非常理想的,因為通常情況下,能夠像這樣被突出顯示的特征才是區分一個物品和另一個物品的關鍵

卷積?

不同的過濾器有不同的效果:

?豎直過濾器(留下豎直線):

?水平過濾器(留下水平線):

卷積核與過濾器的區別

卷積核是二維的,濾波器是三維的(高維,也可能是四維的)

  • 卷積核就是由長和寬來指定的,是一個二維的概念。
  • 而過濾器是是由長、寬和深度指定的,是一個三維的概念。
  • 過濾器可以看做是卷積核的集合
  • 過濾器比卷積核高一個維度——深度。

一、獲取數據集

# 1、獲取數據集
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()

二、設定數據集大小、歸一化

卷積期望一個包含所有數據單一張量,所以要把訓練數據設置為60000x28x28x1的一個4D列表。(如果不這樣做,會在訓練時得到一個錯誤,因為卷積操作將不能識別數據形狀。)?

# 2、設定數據集大小、歸一化
training_images=training_images.reshape(60000, 28, 28, 1)
training_images=training_images / 255.0
test_images = test_images.reshape(10000, 28, 28, 1)
test_images=test_images/255.0

三、構建卷積神經網絡

# 3、構建卷積神經網絡
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷積層  64:卷積過濾器數量  (3,3):卷積核大小tf.keras.layers.MaxPooling2D(2, 2),
#                 池化層tf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])

四、編譯&&訓練

# 4、編譯&&訓練
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(training_images, training_labels, epochs=5)
# 輸出模型各層的影響
model.summary()

五、模型評估?

# 5、模型評估
test_loss = model.evaluate(test_images, test_labels)

?可以發現卷積神經網絡比起前面的DNN神經網絡效果好了不少,但是相應的,時間會比較慢。

六、可視化

1、創建plt圖?

import matplotlib.pyplot as plt# plt圖
f, a = plt.subplots(3, 4)
# f:子圖像    a:array列表    3:行    4:列

2、獲取各卷積層

# 各卷積層
from tensorflow.keras import models
layer_outputs = [layer.output for layer in model.layers]
print(layer_outputs)
activation_model = tf.keras.models.Model(inputs = model.input, outputs = layer_outputs)
#                                                 輸入層                  輸出層

3、觀察卷積層

# 抽3個圖片(FIRST、SECOND、THIRD),觀察神經網絡的前四層(正好對應四個卷積層)(神經網絡共7層)
# test_images[...]:第幾張圖片    x:第幾層
# 第一張圖片卷積神經網絡處理情況f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1])    #1:下標為1的卷積核(第2個卷積核)
# 第二張圖片卷積神經網絡處理情況f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三張圖片卷積神經網絡處理情況f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])

總代碼

卷積神經網絡?

import tensorflow as tf
print(tf.__version__)# 1、獲取數據集
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 特征訓練集       目標訓練集          特征測試集     目標測試集# 2、設定數據集大小、歸一化
training_images=training_images.reshape(60000, 28, 28, 1)
training_images=training_images / 255.0
test_images = test_images.reshape(10000, 28, 28, 1)
test_images=test_images/255.0# 3、構建卷積神經網絡
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷積層  64:卷積過濾器數量  (3,3):卷積核大小tf.keras.layers.MaxPooling2D(2, 2),
#                 池化層tf.keras.layers.Conv2D(64, (3,3), activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# 4、編譯&&運行
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(training_images, training_labels, epochs=5)
# 輸出模型各層的影響
model.summary()# 5、模型評估
test_loss = model.evaluate(test_images, test_labels)

可視化

# 卷積、池化過程可視化
import matplotlib.pyplot as plt# plt圖
f, a = plt.subplots(3, 4)
# f:子圖像    a:array列表    3:行    4:列# 隨機選取可視化的圖片
FIRST_IMAGE=0
SECOND_IMAGE=7
THIRD_IMAGE=26# 各卷積層
from tensorflow.keras import models
layer_outputs = [layer.output for layer in model.layers]
print(layer_outputs)
activation_model = tf.keras.models.Model(inputs = model.input, outputs = layer_outputs)
#                                                 輸入層                  輸出層# 按行可視化
for x in range(0,4):
# 觀察卷積層(7個層輸出,這里只取了四個卷積層)f = activation_model.predict(test_images[0].reshape(1, 28, 28, 1))print(len(f))# 抽3個圖片(FIRST、SECOND、THIRD),觀察神經網絡的前四層(正好對應四個卷積層)(神經網絡共7層)
# test_images[...]:第幾張圖片    x:第幾層
# 第一張圖片卷積神經網絡處理情況f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1])    #1:下標為1的卷積核(第2個卷積核)
# 第二張圖片卷積神經網絡處理情況f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三張圖片卷積神經網絡處理情況f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])

總結

以上是生活随笔為你收集整理的TensorFlow(7)卷积神经网络实战(1)(可视化)的全部內容,希望文章能夠幫你解決所遇到的問題。

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