Я пытаюсь обучить CNN в Керасе.
X_train.shape
дает
(4137, 150, 150, 1)
Первые и последние элементы моей модели:
from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Dense
from keras.layers import Dropout,Activation,Flatten
model = Sequential()
model.add(Conv2D(32, (2,2),
input_shape=(150,150,1), activation='relu'))
model.add(MaxPooling2D((3, 3)))
model.add(Dropout(0.25))
model.add(Activation('relu'))
#...
model.add(Flatten())
model.add(Dense(500))
model.add(Activation('relu'))
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('softmax'))
Нет проблем с запуском и компиляцией модели, но ее подгонка выдает ошибку:
model.fit(x=X_train,
y=y_train,
epochs=20)
y_train.shape is (5910,). Подгонка дает ошибку
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
TypeError: float() argument must be a string or a number, not 'list'
The above exception was the direct cause of the following exception:
...
ValueError: setting an array element with a sequence.
Я полагаю, что это может быть связано с тем, что, как показано на рисунке ниже, преобразование данных в форму (количество выборок, строк, столбцов, 1) делает каждую ячейку своей собственной список. Если я преобразую данные в трехмерное (количество выборок, строк, столбцов) и соответствующим образом скорректирую форму ввода архитектуры модели, это вызовет еще одну ошибку.
Я положил полный код на Kaggle здесь .