Python (Keras): Значение Ошибка: Ошибка при проверке ввода - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь обучить CNN векторам слов, сгенерированным с использованием библиотеки gensim.После того как я сгенерировал все свои данные в числовой форме, я пытаюсь передать их в модель CNN, используя Keras, когда я получаю следующую ошибку:

ValueError: Ошибка при проверке ввода: ожидается, что conv2d_1_input будет иметь 4 измерения, но получил массив с формой (20000, 250, 50)

Я искал эту проблему в течение нескольких часов, и все решения, опубликованные для похожих / одинаковых проблем, не смогли решить эту ошибку длямне.Кто-нибудь может увидеть, где я не так с входными размерами?Я сгенерировал некоторые случайные данные, которые воссоздают ошибку:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Convolution2D, Flatten, Dropout
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
from keras.callbacks import TensorBoard

t = np.random.rand(20000,250,50)
l = np.random.rand(20000,1)

embedding_vecor_length = 50
net = Sequential()
net.add(Convolution2D(64, 3,input_shape=(1,250,50), 
data_format='channels_first'))
# Convolutional model (3x conv, flatten, 2x dense)
net.add(Convolution2D(32,(3), padding='same'))
net.add(Convolution2D(16,(3), padding='same'))
net.add(Convolution2D(8,(3), padding='same'))
net.add(Flatten())
net.add(Dropout(0.2))
net.add(Dense(180,activation='sigmoid'))
net.add(Dropout(0.2))
net.add(Dense(1,activation='sigmoid'))
net.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

tensorBoardCallback = TensorBoard(log_dir='./logs', write_graph=True)
net.summary()

net.fit(t, l, epochs=3, callbacks=[tensorBoardCallback], batch_size=64)

1 Ответ

0 голосов
/ 05 декабря 2018

Свертки используют 4 измерения.Учитывая, что вы используете "channel_first":

  • Изображения
  • Каналы
  • Сторона 1
  • Сторона 2

В вашем входе отсутствуют каналы.

t = np.random.rand(20000,1,250,50)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...