Как подготовить эти этикетки для Keras's Conv2D? Ошибка значения: ожидается, что плотность_14 будет иметь 4 измерения - PullRequest
0 голосов
/ 01 октября 2019

У меня есть набор данных из 30 изображений nii и 30 меток, например:

1     1
2     1
3     1
4     1
5     1
6     1
8     1
9     1
10    1
11    1
12    1
13    1
14    1
17    1
18    1
19    1
20    1
21    1
22    1
23    1
24    1
26    2
27    2
28    2
29    2
30    2

Но когда я передаю изображения и метки в эту сеть:

model_conv2d = Sequential()
model_conv2d.add(Conv2D(32, batch_size=30, kernel_size=(8,6), input_shape=(61, 61, 61)))
model_conv2d.add(MaxPooling2D())
model_conv2d.add(Conv2D(64, kernel_size=(8,6)))
model_conv2d.add(Dropout(0.2))
model_conv2d.add(Dense(1, activation="sigmoid"))

Iполучить эту ошибку:

ValueError: Error when checking target: expected dense_14 to have 4 dimensions, but got array with shape (25, 2)

Что мне делать? Вот как я готовлю свои ярлыки:

X_rs = X.reshape (30, -1)

scaler = StandardScaler()
binarizer = OneHotEncoder()
X_scaled = scaler.fit_transform(X_rs)
y_binned = binarizer.fit_transform(y.values.reshape(-1, 1))
X_train = X_scaled[:25, :].reshape(25, 61, 61, 61)
y_train = y_binned[:25]
X_test = X_scaled[25:, :]
y_test = y_binned[25:]

Можете ли вы сказать мне, что я делаю здесь неправильно?

Спасибо.

1 Ответ

0 голосов
/ 01 октября 2019

Я думаю, что ваша проблема связана со слоем Dense. Вы применяете Dense без слоя Flatten ранее, поэтому его выходная форма (batch_size, 20, 23, 1).

То есть, когда вы передаете y_train (или y_test) с формой(batch_size, num_labels), ошибка появляется, потому что выходная форма вашей сети (batch_size, 20, 23, 1).

Вы должны попробовать:

model_conv2d = Sequential()
model_conv2d.add(Conv2D(32, batch_size=30, kernel_size=(8,6), input_shape=(61, 61, 61)))
model_conv2d.add(MaxPooling2D())
model_conv2d.add(Conv2D(64, kernel_size=(8,6)))
model_conv2d.add(Flatten())
model_conv2d.add(Dropout(0.2))
model_conv2d.add(Dense(1, activation="sigmoid"))
...