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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

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

目錄

基礎(chǔ)理論?

卷積?

卷積核與過濾器的區(qū)別

一、獲取數(shù)據(jù)集

二、設(shè)定數(shù)據(jù)集大小、歸一化

三、構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)

四、編譯&&訓(xùn)練

五、模型評估?

六、可視化

1、創(chuàng)建plt圖?

2、獲取各卷積層

3、觀察卷積層

總代碼

卷積神經(jīng)網(wǎng)絡(luò)?

可視化


基礎(chǔ)理論?

????????在實(shí)際應(yīng)用中,攝像頭捕捉到的圖片,主物品往往會偏于一側(cè)的位置,甚至有角度的旋轉(zhuǎn),這時神經(jīng)網(wǎng)絡(luò)模型對這些圖片的分類就會不準(zhǔn)。這時我們引入:卷積神經(jīng)網(wǎng)絡(luò)(CNN)

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

????????這種計(jì)算對于計(jì)算機(jī)視覺來說是非常理想的,因?yàn)橥ǔG闆r下,能夠像這樣被突出顯示的特征才是區(qū)分一個物品和另一個物品的關(guān)鍵

卷積?

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

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

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

卷積核與過濾器的區(qū)別

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

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

一、獲取數(shù)據(jù)集

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

二、設(shè)定數(shù)據(jù)集大小、歸一化

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

# 2、設(shè)定數(shù)據(jù)集大小、歸一化
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

三、構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)

# 3、構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷積層  64:卷積過濾器數(shù)量  (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')
])

四、編譯&&訓(xùn)練

# 4、編譯&&訓(xùn)練
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)

?可以發(fā)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)比起前面的DNN神經(jīng)網(wǎng)絡(luò)效果好了不少,但是相應(yīng)的,時間會比較慢。

六、可視化

1、創(chuàng)建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),觀察神經(jīng)網(wǎng)絡(luò)的前四層(正好對應(yīng)四個卷積層)(神經(jīng)網(wǎng)絡(luò)共7層)
# test_images[...]:第幾張圖片    x:第幾層
# 第一張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1])    #1:下標(biāo)為1的卷積核(第2個卷積核)
# 第二張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])

總代碼

卷積神經(jīng)網(wǎng)絡(luò)?

import tensorflow as tf
print(tf.__version__)# 1、獲取數(shù)據(jù)集
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
# 特征訓(xùn)練集       目標(biāo)訓(xùn)練集          特征測試集     目標(biāo)測試集# 2、設(shè)定數(shù)據(jù)集大小、歸一化
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、構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
# Conv2D:卷積層  64:卷積過濾器數(shù)量  (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、編譯&&運(yùn)行
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:列# 隨機(jī)選取可視化的圖片
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),觀察神經(jīng)網(wǎng)絡(luò)的前四層(正好對應(yīng)四個卷積層)(神經(jīng)網(wǎng)絡(luò)共7層)
# test_images[...]:第幾張圖片    x:第幾層
# 第一張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f1 = activation_model.predict(test_images[FIRST_IMAGE].reshape(1, 28, 28, 1))[x]a[0,x].imshow(f1[0, : , :, 1])    #1:下標(biāo)為1的卷積核(第2個卷積核)
# 第二張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f2 = activation_model.predict(test_images[SECOND_IMAGE].reshape(1, 28, 28, 1))[x] a[1,x].imshow(f2[0, : , :, 1])
# 第三張圖片卷積神經(jīng)網(wǎng)絡(luò)處理情況f3 = activation_model.predict(test_images[THIRD_IMAGE].reshape(1, 28, 28, 1))[x]a[2,x].imshow(f3[0, : , :, 1])

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。