【发布时间】:2019-01-21 03:26:21
【问题描述】:
我是深度学习的新手,我一直在尝试使用深度学习方法进行自然语言处理并使用路透社数据集创建一个简单的情感分析器。这是我的代码:
import numpy as np
from keras.datasets import reuters
from keras.preprocessing.text import Tokenizer
from keras.models import Sequential
from keras.layers import Dense, Dropout, GRU
from keras.utils import np_utils
max_length=3000
vocab_size=100000
epochs=10
batch_size=32
validation_split=0.2
(x_train, y_train), (x_test, y_test) = reuters.load_data(path="reuters.npz",
num_words=vocab_size,
skip_top=5,
maxlen=None,
test_split=0.2,
seed=113,
start_char=1,
oov_char=2,
index_from=3)
tokenizer = Tokenizer(num_words=max_length)
x_train = tokenizer.sequences_to_matrix(x_train, mode='binary')
x_test = tokenizer.sequences_to_matrix(x_test, mode='binary')
y_train = np_utils.to_categorical(y_train, 50)
y_test = np_utils.to_categorical(y_test, 50)
model = Sequential()
model.add(GRU(50, input_shape = (49,1), return_sequences = True))
model.add(Dropout(0.2))
model.add(Dense(256, input_shape=(max_length,), activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(50, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
history = model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=validation_split)
score = model.evaluate(x_test, y_test)
print('Test Accuracy:', round(score[1]*100,2))
我不明白为什么,每次我尝试使用 GRU 或 LSTM 单元而不是 Dense 单元时,都会收到此错误:
ValueError:检查输入时出错:预期 gru_1_input 有 3 尺寸,但得到了形状为 (8982, 3000) 的数组
我在网上看到添加return_sequences = True 可以解决问题,但正如您所见,问题仍然存在于我的情况。
在这种情况下我该怎么办?
【问题讨论】:
-
你的
x_train.shape是(8982, 3000)-input_shape = (49,1)来自哪里?
标签: python keras nlp deep-learning lstm