Keras - Не удалось освободить мои входные данные для модели keras. Ошибка при проверке ввода - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь выучить свои таблицы истинности модели Keras. Это только для того, чтобы узнать немного больше о Keras, так что этот пример только для учебных целей. Мой вклад выглядит так:

x = np.array([
    [
    [0, 0, 0],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 1]
    ],
    [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 1]
    ],
    [
    [0, 0, 1],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
    ],
    [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 0]
    ],
    [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
    ], 
    [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 1],
    ]
])

y = np.array([['AND'],['OR'],['NAND'], ['NOR'], ['XOR'], ['XNOR']])

Когда я подаю его в свой первый слой, я делаю следующее:

model = Sequential()
model.add(Dense(72, input_shape=(6, 4, 3)))
model.add(Activation('tanh'))
model.add(Dense(6))
model.add(Activation('sigmoid'))
sgd = SGD(lr=0.1)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd)
model.fit(x, y, epochs=1000, batch_size=32)

Моя форма ввода, таким образом, 6 ворот с 4 строками и 3 столбцами и плотным слоем 72, потому что 6 * 4 * 3. Теперь, когда я выполняю это, я получаю следующую ошибку:

ValueError: Error when checking input: expected dense_32_input to have 4 dimensions, but got array with shape (6, 4, 3)

Может кто-нибудь объяснить мне, что я делаю неправильно, и как в будущем я должен передать свои данные в Keras?

Заранее спасибо!

1 Ответ

0 голосов
/ 23 января 2019

input_shape в вашем первом плотном слое должно быть (4, 3) вместо (6, 4, 3).Первое измерение (6 в вашем случае) относится к размеру пакета, который вы не должны указывать в форме ввода.

Есть и другие проблемы с вашей моделью.Возможно, вы захотите использовать softmax вместо sigmoid на вашем выходном слое.Во-вторых, ваш y вектор с метками должен иметь числовые значения.Например, вы можете вместо этого представлять каждое слово целочисленным индексом.В-третьих, я думаю, что вы хотите, чтобы слой Flatten в начале вашей модели выровнял ваш входной тензор ранга 2 в тензор ранга 1.

...