Не можете определить ошибку формы ввода керас?

Я пытаюсь передать моей нейронной сети массив с формой с формой (1169909, 10, 10).

Но независимо от того, что я делаю...

input_shape=(None,10,10)
input_shape=x_train.shape[1:]
input_shape=x_train.shape
input_shape=(1169909, 1)
input_shape=(10,10)
input_shape=(1169909,10)
input_shape=(1169909,10,10)
input_shape=(1,10,10)

Я все еще получаю ошибку. Ошибка меняется:

but got array with shape (1169909, 10, 10)
but got array with shape (1169909, 1)

В зависимости от того, каким образом я даю информацию, это только добавляет мне путаницы.

Фактический ввод выглядит следующим образом, это массив этих меньших массивов 10x10:

array([[ 2, -1, -1, -1, -1, -1, -1, -1, -1,  0],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [11, -1, 11,  6,  3,  2, -1, -1, -1, 11],
       [-1, -1, -1, -1,  5,  7, -1, -1,  2,  7],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, 22, 25, -1, -1, -1, 22],
       [22, -1, -1, -1, 26, 29, -1, -1, 26, 25],
       [27, -1, -1, -1, -1, -1, -1, -1, -1, 23],
       [31, 24, 31, -1, -1, -1, -1, -1, -1, 31]])

Я пытался понять эту проблему, глядя на переполнение стека и в других местах, но я не могу понять проблему, и эти решения не работают для меня.

Вот модель на данный момент:

x_train, x_test, y_train, y_test = train_test_split(xving, ywing, test_size=0.2)

x_train = numpy.array(x_train)
y_train = numpy.array(y_train)


model = Sequential()
model.add(keras.layers.Dense(250,activation='tanh', input_shape=(None,10,10)))
model.add(keras.layers.Dense(150,activation='relu'))
model.add(keras.layers.Dense(25,activation='sigmoid'))
model.add(keras.layers.Dense(2,activation='softmax'))
optimizerr = keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
model.compile(optimizer=optimizerr, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train,epochs = 25, batch_size = 32, verbose=1)

РЕДАКТИРОВАТЬ: Итак, когда я использую:

input_shape=x_train.shape[1:]

Ошибка становится с целью:

Error when checking target: expected dense_32 to have 3 dimensions, but got array with shape (1169909, 1)

Но цель - это массив. Когда я сохраняю его в виде списка, я получаю сообщение об ошибке:

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 1169909 arrays: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...

Итак, теперь я предполагаю, что мой вопрос касается того, почему цель является проблемой.

y_train.shape

выходы:

(1169909,)

Так я все еще в замешательстве?

2 ответа

Решение

Предполагая, что у вас есть 1169909 изображений (или двумерных элементов данных) в качестве набора данных, вы должны использовать двухмерный сверточный слой спереди, если вы хотите передать их в вашу модель в виде матриц, иначе это не будет отличаться от выравнивания каждого изображения перед передачей их всех. к вашей модели. Я предлагаю использовать сверточную схему, но если это не так, вы можете сгладить массив следующим образом:

x = x.reshape((1169909, 100))
model.add(keras.layers.Dense(250, activation='tanh', input_dim=100))

Опять же, передача 2D данных в плотный слой не будет использовать преимущества структурных свойств данных.

Я чувствую, что ответ должен быть

input_shape=x_train.shape[1:]

так как это не работает, вы можете поделиться ошибкой, которую вы получили за это?

Другие вопросы по тегам