【问题标题】:How to connect LSTM with Dense?如何将 LSTM 与 Dense 连接起来?
【发布时间】:2020-05-12 02:37:23
【问题描述】:

当尝试将 LSTM 与 Dense 连接时,它会报错(尝试训练时):

input = Input(shape=(x_train.shape[1], None))
X = Embedding(num_words, max_article_len)(input)
X = LSTM(128, return_sequences=True, dropout = 0.5)(X)
X = LSTM(128)(X)
X = Dense(32, activation='softmax')(X)

model = Model(inputs=[input], outputs=[X])
...
>>> ValueError: Error when checking target: expected dense to have shape (32,) but got array with shape (1,)

我尝试了不同的连接选项,但错误重复:

X, h, c = LSTM(128, return_sequences=False, return_state=True, dropout = 0.5)(X)
X = Dense(32, activation='softmax')(X)
>>> ValueError: Error when checking target: expected dense to have shape (32,) but got array with shape (1,)

关于功能性 API/Sequential 的任何解决方案选项?

数据转换代码:

train = pd.read_csv('train.csv')
articles = train['text']
y_train = train['lang']

num_words = 50000
max_article_len = 20

tokenizer = Tokenizer(num_words=num_words)
tokenizer.fit_on_texts(articles)

sequences = tokenizer.texts_to_sequences(articles)
x_train = pad_sequences(sequences, maxlen=max_article_len, padding='post')

x_train.shape
>>> (18974, 100)
y_train.shape
>>> (18974,)

【问题讨论】:

    标签: python-3.x tensorflow machine-learning lstm keras-layer


    【解决方案1】:

    最后一个参数必须设置为False

    X = LSTM(128, return_sequences=True, dropout = 0.5)(X)
    X = LSTM(128, return_sequences=False)(X)
    

    如果您仍然有问题,那么问题一定出在您的输入形状上。

    【讨论】:

    • 然后我遇到一个错误 >>> ValueError: Error when checks target: expected dense to have 3 dimensions, but got array with shape (18974, 1)
    • 对不起,我更新了答案,因为我无意中把你带上了一条坏路;实际上,最后一个 LSTM 层的 return_sequences 必须为 false;但是,在这种情况下,输入形状一定有问题。
    • 我重新检查了输入,我认为它是正确的。我补充了我的问题并展示了我是如何准备数据的。我有一个包含两列的常规表格:lang 和 text
    • 哦,我忘记了 y_train 的 to_categorical。现在一切正常。感谢您的帮助
    • 没问题。如果可以的话,请也支持答案,因为它解决了您的问题。谢谢
    猜你喜欢
    • 2019-04-15
    • 2022-06-10
    • 1970-01-01
    • 2016-10-02
    • 2018-04-06
    • 2021-02-23
    • 2020-05-12
    • 2019-07-16
    相关资源
    最近更新 更多