尝试了解 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
代替,您可以灵活地将任何批量大小提供给网络。
我对 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
代替,您可以灵活地将任何批量大小提供给网络。