关于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
,您可以灵活地为网络提供任何批处理大小。