尝试了解 Tensorflow input_shape

Tries to understand Tensorflow input_shape

我对 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)

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

您也可以使用 batch_input_shape 参数来代替 batch_size

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

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

有了这个:

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

如果您在模型中设置一个特定的 batch_size,然后输入一个不同于 3 的尺寸(在您的情况下),您将收到错误消息。使用 input_shape 代替,您可以灵活地将任何批量大小提供给网络。