一般來說,我對 keras、cnn 和深度學習相當陌生,所以如果解決方案非常簡單,我非常抱歉。我真的陷入了死胡同。所以,問題是,我有一個 3D CNN,其輸入數據為 50x50x50 的立方體。我想將它們分類為0或1,所以這是一個二元分類問題。在將其擬合到神經網絡之前,我當然準備了數據,對其進行重構、調整大小和標準化。因此,圖像具有可比性(1 體素為 2 毫米),標準化為 0 到 1 范圍且大小相同。因此,當我嘗試將數據擬合到我的模型中時,結果并不那么令人鼓舞。準確度始終顯示為 0,我在單個 epoch 中獲得的最高準確度是accuracy: 0.0159,損失始終在 3.2 到 3.5 之間我也改變了 epoch 的數量,但無論是 5 個還是 50 個都沒關系。結果總是相同的。這是我的 CNN 架構的代碼 model = Sequential() model.add(Conv3D(64, kernel_size=(5, 5, 5), activation='linear', kernel_initializer='glorot_uniform', input_shape=shape)) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(Dropout(.25)) model.add(Conv3D(128, kernel_size=(3, 3, 3), activation='linear', kernel_initializer='glorot_uniform')) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(MaxPooling3D(pool_size=(3, 3, 3))) model.add(Dropout(.25)) model.add(Conv3D(256, kernel_size=(3, 3, 3), activation='linear', kernel_initializer='glorot_uniform')) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(Dropout(.25)) model.add(Conv3D(512, kernel_size=(3, 3, 3), activation='linear', kernel_initializer='glorot_uniform')) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(MaxPooling3D(pool_size=(3, 3, 3))) model.add(Dropout(.25)) model.add(Flatten()) model.add(Dense(256)) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(Dropout(.5)) model.add(Dense(512)) model.add(BatchNormalization(center=True, scale=True)) model.add(LeakyReLU(.1)) model.add(Dropout(.5)) model.add(Dense(256))所以我想問一下,我的架構有什么問題嗎?或者您認為問題更多出在數據方面?我只有 420 張圖像;其中 3/4 用于訓練,1/4 用于測試。這可能是問題所在嗎?當基本模型運行穩定時,我想稍后增強圖像?;蛘呶冶仨毾冗@樣做?
1 回答

LEATH
TA貢獻1936條經驗 獲得超7個贊
這對于具有兩個類別的分類問題沒有意義:
model.add(Dense(256)) model.add(BatchNormalization(center=True, scale=True)) model.add(Activation('softmax'))
改成這樣:
model.add(Dense(1)) model.add(Activation('sigmoid'))
還可以考慮使用'relu'
激活而不是'linear'
卷積層。
添加回答
舉報
0/150
提交
取消