Объявление input_shape преобразованной последовательности в Keras? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь запустить нейронную сеть для ввода текста.Это бинарная классификация.Вот мой рабочий код:

df = pd.read_csv(pathname, encoding = "ISO-8859-1")
df = df[['content_cleaned', 'meaningful']] #Content cleaned: text, meaningful: label

X = df['content_cleaned']
y = df['meaningful']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21) 

tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(X_train)
X_train_encoded = tokenizer.texts_to_sequences(X_train)
X_test_encoded = tokenizer.texts_to_sequences(X_test)

max_len = 100
X_train = pad_sequences(X_train_encoded, maxlen=max_len)
X_test = pad_sequences(X_test_encoded, maxlen=max_len)


batch_size = 100
max_words = 100
input_dim = X_train.shape[1]  # Number of features
model = Sequential()
model.add(layers.Dense(10, activation='relu', input_shape=X_train.shape[1:]))




model.add(layers.Dense(1, activation='sigmoid'))

model.compile(loss='categorical_crossentropy',
          optimizer='adam',
          metrics=['accuracy'])

history = model.fit(X_train, X_test,
                batch_size=batch_size,
                epochs=5,
                verbose=1,
                validation_split=0.1)

Мой вопрос состоит из двух частей.Первый с input_shape при создании слоев.Я смущен относительно синтаксиса объявления этого.При выполнении этой команды:

print(X_train.shape)

Я получаю эту форму: (3609, 100).

Насколько я понимаю, это говорит мне о том, что существует 3609 экземпляров.Из других примеров я наивно предположил, что нужно использовать 100, поскольку есть 100 типов (возможно, неправильно это понимающих), соответствующих max_words, который я инициализировал.Я полагаю, что я мог неправильно выполнить синтаксис при инициализации input_shape.

Второй вопрос - с сообщением об ошибке при запуске всего этого (скорее всего, с неправильным input_shape).Сообщение об ошибке выделяет эту строку кода:

 validation_split=0.1)

Сообщение об ошибке:

ValueError: Error when checking target: expected dense_2 to have shape (None, 1) but got array with shape (1547, 1

Неправильно ли я решаю эту проблему?Я очень плохо знаком с Deep Learning.

Ответы [ 2 ]

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

Аргумент input_shape указывает форму одного обучающего образца .Поэтому вам нужно установить его на X_train.shape[1:] (то есть игнорировать выборки или ось партии):

model.add(layers.Dense(10, activation='relu', input_shape=X_train.shape[1:]))

Далее, передайте X_train и y_train в fit_generator (вместо X_train_encodedи X_test_encoded).

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

Вы пропустили две завершающие скобки ) в строке, где вы определили ввод вашей модели.Также убедитесь, что вы предоставляете функцию активации .

Измените свой код, как показано ниже:

model.add(layers.Dense(10, activation='relu', input_shape=(X_train.shape[0],)))

РЕДАКТИРОВАТЬ:

Для вашей последней ошибки просто измените input_shape на input_shape=(X_train.shape[0],).

...