精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如果在TensorFlow中構建3D-CNN數據集

電子工程師 ? 來源: 深度學習與計算機視覺 ? 作者:磐懟懟 ? 2022-08-10 11:31 ? 次閱讀

3D-CNN簡介

MNIST數據集分類被認為是計算機視覺領域的 hello world 程序。MNIST數據集幫助初學者理解卷積神經網絡(CNN)的概念和實現。

許多人認為圖像只是一個普通矩陣,但實際上并非如此。圖像擁有所謂的空間信息。考慮如下所示的 3X3 矩陣。

[a b c

d e f

g h i]

在正則矩陣中,矩陣中的值將相互獨立。相鄰值不會攜帶矩陣中特定字段的任何關系或信息。例如,在矩陣中代替“e”的值與出現在其他位置的值(如“a”、“b”等)沒有任何聯系。圖像中的情況并非如此。

在圖像中,矩陣中的每個位置代表圖像中的一個像素,每個位置的值代表該像素的值。像素值可以是 8 位圖像中的 [0-255]。每個像素與其相鄰像素有某種關系。任何像素的鄰域是其周圍的一組像素。對于任何像素,有 3 種方法來表示其鄰域,稱為 N-4、ND 和 N-8。讓我們詳細了解它們。

N-4:它表示存在于參考像素的頂部、底部、右側和左側的像素。對于像素“e”,N-4 包含“b”、“f”、“h”和“d”。

ND:它表示從參考像素對角線可訪問的像素。對于像素“e”,ND 包含“a”、“c”、“i”和“g”。

N-8:它代表它周圍存在的所有像素。它包括 N-4 和 ND 像素。對于像素“e”,N-8 包含“a”、“b”、“c”、“d”、“f”、“g”、“h”和“i”。

N-4、N-8 和 ND 像素有助于提取有關像素的信息。例如,這些參數可用于將像素分類為邊界或內部或外部像素。這是圖像的特殊性。人工神經網絡(ANN )接收一維數組形式的輸入。圖像始終存在于具有 1 個或多個通道的 2D 陣列中。當圖像數組轉換為一維數組時,它會丟失空間信息,因此人工神經網絡無法捕獲此信息并且在圖像數據集上表現不佳。而這就是 CNN 擅長的地方。

CNN 接受 2D 數組作為輸入,并使用掩碼(或過濾器或內核)執行卷積操作并提取這些特征。執行稱為池化的過程,該過程減少了提取的特征數量并降低了計算復雜度。完成這些操作后,我們將提取的特征轉換為一個1D數組,并將其提供給學習進行分類的神經網絡層。

本文旨在擴展對 3D 數據進行卷積操作的概念。我們將構建一個 3D CNN,它將在 3D MNIST 數據集上執行分類

數據集概述

我們將在數據集中使用fulldatasetvectors.h5文件。該文件具有從所有 3D 點云的體素化 (x:16, y:16, z:16) 獲得的 4096-D 向量。該文件包含 10000 個訓練樣本和 2000 個測試樣本。數據集也有可以使用的點云數據。

導入模塊

由于數據以h5格式存儲,我們將使用h5py模塊從 fulldatasetvectors 文件中的數據加載數據集。TensorFlow和Keras將用于構建和訓練 3D-CNN。to_categorical函數有助于對 目標變量執行 one-hot 編碼。我們還將使用 earlystopping 回調來停止訓練并防止模型過度擬合。


	importnumpyasnp importh5py fromtensorflow.keras.utilsimportto_categorical fromtensorflow.kerasimportlayers fromtensorflow.keras.modelsimportSequential fromtensorflow.keras.initializersimportConstant fromtensorflow.keras.optimizersimportAdam fromtensorflow.keras.callbacksimportEarlyStopping 

加載數據集

如前所述,我們將使用 h5py 模塊從 fulldatasetvectors.h5 文件中加載數據。

使用 h5py.File(‘。./input/3d-mnist/full_dataset_vectors.h5’, ‘r’) 作為數據集:


	xtrain,xtest=dataset[“X_train”][:],dataset[“X_test”][:] ytrain,ytest=dataset[“y_train”][:],dataset[“y_test”][:] xtrain=np.array(xtrain) xtest=np.array(xtest) print(‘trainshape:’,xtrain.shape) print(‘testshape:’,xtest.shape) xtrain=xtrain.reshape(xtrain.shape[0],16,16,16,1) xtest=xtest.reshape(xtest.shape[0],16,16,16,1) ytrain,ytest=to_categorical(ytrain,10),to_categorical(ytest,10) 我們可以看到訓練數據有 10000 個樣本,而測試數據有 2000 個樣本,每個樣本包含 4096 個特征。

	trainshape:(10000,4096) testshape:(2000,4096) 

構建 3D-CNN

3D-CNN,就像任何普通的 CNN 一樣,有兩部分——特征提取器和 ANN 分類器,并且以相同的方式執行。

與普通 CNN 不同,3D-CNN 執行 3D 卷積而不是 2D 卷積。我們將使用 Keras 的Sequential API 來構建 3D CNN。前 2 層將是具有 32 個過濾器和 ReLU 作為激活函數的 3D 卷積層,然后是用于降維的最大池化層。這些層還添加了一個偏置項,其值為 0.01。默認情況下,偏差值設置為 0。

再次使用同一組圖層,但使用 64 個過濾器。然后是 dropout 層和 flatten 層。flatten 層有助于將特征重塑為可由人工神經網絡處理的一維陣列,即密集層。ANN部分由 2 層組成,分別有 256 和 128 個神經元,以 ReLU 作為激活函數。然后是具有 10 個神經元的輸出層,因為數據集中存在 10 個不同的類別或標簽。


	model=Sequential() model.add(layers.Conv3D(32,(3,3,3),activation='relu',input_shape=(16,16,16,1),bias_initializer=Constant(0.01))) model.add(layers.Conv3D(32,(3,3,3),activation='relu',bias_initializer=Constant(0.01))) model.add(layers.MaxPooling3D((2,2,2))) model.add(layers.Conv3D(64,(3,3,3),activation='relu')) model.add(layers.Conv3D(64,(2,2,2),activation='relu')) model.add(layers.MaxPooling3D((2,2,2))) model.add(layers.Dropout(0.6)) model.add(layers.Flatten()) model.add(layers.Dense(256,'relu')) model.add(layers.Dropout(0.7)) model.add(layers.Dense(128,'relu')) model.add(layers.Dropout(0.5)) model.add(layers.Dense(10,'softmax')) model.summary() 這是 3D-CNN 的架構。

	Model:"sequential_2" _________________________________________________________________ Layer(type)OutputShapeParam# ================================================================= conv3d_5(Conv3D)(None,14,14,14,32)896 _________________________________________________________________ conv3d_6(Conv3D)(None,12,12,12,32)27680 _________________________________________________________________ max_pooling3d_2(MaxPooling3(None,6,6,6,32)0 _________________________________________________________________ conv3d_7(Conv3D)(None,4,4,4,64)55360 _________________________________________________________________ conv3d_8(Conv3D)(None,3,3,3,64)32832 _________________________________________________________________ max_pooling3d_3(MaxPooling3(None,1,1,1,64)0 _________________________________________________________________ dropout_4(Dropout)(None,1,1,1,64)0 _________________________________________________________________ flatten_1(Flatten)(None,64)0 _________________________________________________________________ dense_3(Dense)(None,256)16640 _________________________________________________________________ dropout_5(Dropout)(None,256)0 _________________________________________________________________ dense_4(Dense)(None,128)32896 _________________________________________________________________ dropout_6(Dropout)(None,128)0 _________________________________________________________________ dense_5(Dense)(None,10)1290 ================================================================= Totalparams:167,594 Trainableparams:167,594 Non-trainableparams:0 

訓練 3D-CNN

我們將使用 Adam 作為優化器。分類交叉熵將用作訓練模型的損失函數,因為它是一個多類分類。準確率將用作訓練的損失指標。

如前所述,在訓練模型和 dropout 層時,將使用 Earlystopping 回調。一旦任何參數(如損失或準確性)在一定數量的時期內沒有改善,Earlystopping 回調有助于停止訓練過程,這反過來又有助于防止模型的過度擬合。

Dropout 通過在訓練時隨機關閉一些神經元并使模型學習而不是記憶,來幫助防止模型的過度擬合。dropout 值不宜過高,否則可能導致模型欠擬合,并不理想。


	model.compile(Adam(0.001),'categorical_crossentropy',['accuracy']) model.fit(xtrain,ytrain,epochs=200,batch_size=32,verbose=1,validation_data=(xtest,ytest),callbacks=[EarlyStopping(patience=15)]) 這些是訓練 3D-CNN 的一些時期。

	Epoch1/200 313/313[==============================]-39s123ms/step-loss:2.2782-accuracy:0.1237-val_loss:2.1293-val_accuracy:0.2235 Epoch2/200 313/313[==============================]-39s124ms/step-loss:2.0718-accuracy:0.2480-val_loss:1.8067-val_accuracy:0.3395 Epoch3/200 313/313[==============================]-39s125ms/step-loss:1.8384-accuracy:0.3382-val_loss:1.5670-val_accuracy:0.4260 ... ... Epoch87/200 313/313[==============================]-39s123ms/step-loss:0.7541-accuracy:0.7327-val_loss:0.9970-val_accuracy:0.7061 

測試 3D-CNN

3D-CNN在訓練數據上達到了73.3%的準確率,在測試數據上達到了70.6%的準確率。由于數據集非常小且不平衡,因此準確性可能略低。


	_,acc=model.evaluate(xtrain,ytrain) print('trainingaccuracy:',str(round(acc*100,2))+'%') _,acc=model.evaluate(xtest,ytest) print('testingaccuracy:',str(round(acc*100,2))+'%') 

	313/313[==============================]-11s34ms/step-loss:0.7541-accuracy:0.7327 trainingaccuracy:73.27% 63/63[==============================]-2s34ms/step-loss:0.9970-accuracy:0.7060 testingaccuracy:70.61% 

結論

綜上所述,本文涵蓋了以下主題:

圖像中像素的鄰域

為什么 ANN 在圖像數據集上表現不佳

CNN 和 ANN 的區別

CNN的工作

在 TensorFlow 中構建和訓練 3D-CNN

為了進一步繼續這個項目,可以嘗試通過將像素值投影到另一個軸上,從 MNIST 數據集創建一個新的自定義 3D 數據集。x 軸和 y 軸將與任何圖像中的相同,但像素值將投影在 z 軸上。這種從 2D 數據創建 3D 數據的轉換可以在執行圖像增強之后應用,這樣我們就有了一個平衡且通用的數據集,可用于訓練 3D-CNN 并獲得更好的準確性。

審核編輯:郭婷


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4762

    瀏覽量

    100539
  • 數據集
    +關注

    關注

    4

    文章

    1205

    瀏覽量

    24643

原文標題:在 TensorFlow 中構建 3D-CNN

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TF之CNNCNN實現mnist數據預測

    TF之CNNCNN實現mnist數據預測 96%采用placeholder用法+2層C及其max_pool法+隱藏層dropout法+輸出層softmax法+目標函數cross_e
    發表于 12-19 17:02

    TF之CNNTensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略

    TF之CNNTensorflow構建卷積神經網絡CNN的嘻嘻哈哈事之詳細攻略
    發表于 12-19 17:03

    TensorFlowCNN文本分類

    TensorFlow實現CNN進行文本分類(譯)
    發表于 10-31 09:27

    如何利用PyTorch API構建CNN?

    ?方式有哪些?今天本文將以一個簡單的指南,將幫助您構建和了解構建簡單的CNN的概念。通過閱讀本文之后,將能夠基于PyTorch API構建一個簡單的CNN,并使用FashionMNIS
    發表于 07-16 18:13

    如果在序列模式中使用XADC它如何利用ADC?

    嗨,如果在序列模式中使用XADC它如何利用ADC?例如,如果我有3個頻道; 2個Aux和1個溫度?這些如何在ADC之間劃分? AUX頻道的采樣率是多少?我可以使用獨立的ADC模式,其中2aux將在一
    發表于 08-06 10:21

    TensorFlow邏輯回歸處理MNIST數據

    本節基于回歸學習對 MNIST 數據進行處理,但將添加一些 TensorBoard 總結以便更好地理解 MNIST 數據。MNIST由https://www.
    發表于 08-11 19:36

    TensorFlow邏輯回歸處理MNIST數據

    本節基于回歸學習對 MNIST 數據進行處理,但將添加一些 TensorBoard 總結以便更好地理解 MNIST 數據。MNIST由https://www.
    發表于 08-11 19:36

    高階API構建模型和數據使用

    能擬合或逼近現實世界事物或現象的數學模型,故樣本數據大,可以覆蓋事物或現象所有特征時,可以越準確的識別事物,這也是大數據時代,數據是燃料的觀點。T
    發表于 11-04 07:49

    如何用TensorFlow導入MNIST數據?

    TensorFlow導入MNIST數據
    發表于 11-11 07:33

    如果在CAN高線或CAN低線中出現開路,為什么驅動系統數據總線會完全中斷?

    如果在CAN高線或CAN低線中出現開路,為什么驅動系統數據總線會完全中斷?
    發表于 05-09 10:55

    基于3D-CNN的無參考視頻質量評價方法

    神經網絡(3D-CNN)引入到了視頻質量評價,提出了一種基于3D-CNN的無參考視頻質量評價方法,可以適用于非特定失真類型的NR-VQA.首先,通過3D塊來有效學習和表征視頻內容的時
    發表于 01-03 10:18 ?2次下載

    谷歌AI研發TensorFlow3D操作速度竟提高二十倍

    Google AI發布了TensorFlow 3D,將3D深度學習能力引入TensorFlow,加入3D稀疏卷積網絡,在Waymo Open
    的頭像 發表于 03-12 09:33 ?2241次閱讀

    如果在Zephyr內如何使用ESP32藍牙

    在Zephyr ESP32 藍牙驅動簡析一文簡要分析了esp32 藍牙如何集成進Zephyr,本文接著說明如果在Zephyr內使用ESP32藍牙。 在Zepher中使用ESP32藍牙比WIFI還要
    的頭像 發表于 06-07 16:42 ?3671次閱讀

    3D點云數據3D數字化技術的應用

    隨著計算機視覺技術的不斷發展,3D 數字化技術已經成為了當今工業制造領域和三維醫學影像領域的關鍵技術。然而,構建高精度、高分辨率的 3D 點云數據
    的頭像 發表于 05-06 16:46 ?1369次閱讀

    如何在TensorFlow構建并訓練CNN模型

    TensorFlow構建并訓練一個卷積神經網絡(CNN)模型是一個涉及多個步驟的過程,包括數據預處理、模型設計、編譯、訓練以及評估。下面
    的頭像 發表于 07-04 11:47 ?761次閱讀