【问题标题】:Tries to understand Tensorflow input_shape尝试理解 TensorFlow input_shape
【发布时间】:2021-02-23 02:40:26
【问题描述】:

我对 Tensorflow input_shape 有一些困惑。

假设下面定义的“doc”中有3个文档(每行),词汇表有4个单词(每行每个子列表)。

进一步假设每个单词通过单词嵌入由 2 个数字表示。

该程序仅在我在 Dense 层下指定 input_shape=(3,4,2) 时才有效。 但是当我使用 LSTM 层时,程序仅在 input_shape=(4,2) 时有效,而在 input_shape=(3,4,2) 时无效。

那么如何为这些输入指定输入形状呢?如何理解它?

from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import categorical_crossentropy

doc=[
      [[1,0],[0,0],[0,0],[0,0]],
      [[0,0],[1,0],[0,0],[0,0]],
      [[0,0],[0,0],[1,0],[0,0]]
      ]

model=Sequential()
model.add(Dense(2,input_shape=(3,4,2))) # model.add(LSTM(2,input_shape=(4,2)))
model.compile(optimizer=Adam(learning_rate=0.0001),loss="sparse_categorical_crossentropy",metrics=("accuracy"))
model.summary()
output=model.predict(doc)
print(model.weights)
print(output)

【问题讨论】:

  • 是不是因为 LSTM 一次输入一个文档中的 4 个单词?所以它不能同时提供所有 3 个文档。

标签: tensorflow deep-learning lstm tensorflow2.0


【解决方案1】:

keras.layers.LTSM 层中的input_shape 参数需要一个形状为[timesteps, features] 的二维数组。您的 doc 的形状为 [batch_size, timesteps, features],因此一维太多。

如果您也想提要batch_size,您可以改用batch_input_shape 参数。

为此,您只需替换这行代码:

model.add(LSTM(2,input_shape=(4,2)))

有了这个:

model.add(LSTM(2,batch_input_shape=(3,4,2)))

如果您在模型中设置特定的 batch_size,然后输入 3 以外的其他尺寸(在您的情况下),您将收到错误消息。改用input_shape,您可以灵活地向网络提供任何批量大小。

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多