尝试理解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]的2D数组。您的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,您可以灵活地为网络提供任何批处理大小。

相关内容

  • 没有找到相关文章

最新更新