我得到一個錯誤,這在Keras初學者中似乎是一個常見問題。我試圖將彩色圖像分類爲'something'或'not_something'並獲得基本模型,以便我可以調整超參數以更好地瞭解它們的功能。使用Keras的密集錯誤
如果有人能解釋爲什麼我特意在model.fit中獲得我的錯誤,然後解釋我應該關注的一些意義/在手前查找一般意義上的維度(在火車和測試集中)。我不確定密集(單位)在二進制分類符爲2的情況下是否應該爲1,您是否也可以解釋這一點?
錯誤:
```
ValueError: Error when checking target: expected dense_18 to have 4 dimensions, but got array with shape (584, 1)
```
代碼:
```
from identify_mounds import *
from PIL import Image
import numpy as np
np.random.seed(6)
import os
import subprocess
from collections import defaultdict
import pickle
from scipy.misc import imread
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
def train_nomound_mound(dic):
X = []
y = []
X_ = []
for im in dic:
X.extend(dic[im]['img_lst'])
y.extend(dic[im]['label'])
for im in X:
arr = imread(im)
X_.append(arr)
X_ = (np.array(X_).reshape(779, 4, 16, 16)/255).astype('float32')
y = np.array(y).astype('float32')
X_train, X_test, y_train, y_test = train_test_split(X_, y, stratify = y)
#Demensions: X_train: (584, 4, 16, 16), y_train: (584,), X_test: (195, 4, 16, 16), y_test: (195,)
model = Sequential()
batch_size = 128
nb_epoch = 12
nb_filters = 32
kernel_size = (3, 3)
input_shape = (4, 16, 16)
pool_size = (2, 2)
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], activation='relu', input_shape=input_shape))
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], activation='relu'))
# model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
model.add(Dense(32, activation='relu'))
model.add(Dropout(.50))
model.add(Dense(1, activation='relu'))
model.compile(loss = 'categorical_crossentropy', optimizer='Adadelta', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_data=(X_test, y_test))
score = model.evaluate(X_test, y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
```
首先,您在Conv2D和Dense圖層之間缺少[Flatten](https://keras.io/layers/core/#flatten)圖層。使用'model.summary()'是一種有用的方式來跟蹤張量在網絡中傳播時的形狀。 – dhinckley
更改最後一個緻密層的形狀。它的單位數量應等於班級數量,以便它可以返回softmax輸出 – Nain
謝謝!也意識到我出於某種原因有兩個卷積層。 – eeskonivich