Tensorflow 理解keras层中的形状
我正在学习Tensorflow和Keras,以实现输入序列长度等于输出序列长度的多对多模型 示例代码: 投入:Tensorflow 理解keras层中的形状,tensorflow,keras,deep-learning,neural-network,tensorflow2.0,Tensorflow,Keras,Deep Learning,Neural Network,Tensorflow2.0,我正在学习Tensorflow和Keras,以实现输入序列长度等于输出序列长度的多对多模型 示例代码: 投入: voc_size = 10000 embed_dim = 64 lstm_units = 75 size_batch = 30 count_classes = 5 型号: from tensorflow.keras.layers import ( Bidirectional, LSTM, Dense, Embeddin
voc_size = 10000
embed_dim = 64
lstm_units = 75
size_batch = 30
count_classes = 5
型号:
from tensorflow.keras.layers import ( Bidirectional, LSTM,
Dense, Embedding, TimeDistributed )
from tensorflow.keras import Sequential
def sample_build(embed_dim, voc_size, batch_size, lstm_units, count_classes):
model = Sequential()
model.add(Embedding(input_dim=voc_size,
output_dim=embed_dim,input_length=50))
model.add(Bidirectional(LSTM(units=lstm_units,return_sequences=True),
merge_mode="ave"))
model.add(Dense(200))
model.add(TimeDistributed(Dense(count_classes+1)))
# Compile model
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
return model
sample_model = sample_build(embed_dim,voc_size,
size_batch, rnn_units,
count_classes)
我很难理解每一层的输入和输出的形状。例如,嵌入层
的输出形状是(批大小、时间步长、输入长度)
,在这种情况下,它是(30、50、64)
类似地,
双向LSTM
之后的输出形状是(30,50,75)
。这将是具有200
单位的下一个密集层的输入。但是密集层
的权重矩阵的形状是(当前层中的单元数
,前一层中的单元数,即(200,75)
在这种情况下。那么,在密集层的2D
形状和双向层的3D
形状之间,矩阵计算是如何进行的呢?任何关于形状澄清的解释都会很有帮助密集层可以进行3D操作,它会将输入展平到形状上(批次大小*时间_步骤、特征)然后应用致密层并将其重新整形回orignal(批次大小、时间步骤、单位)。在致密层的keras中,它表示:
注意:如果层的输入具有大于2的秩,则稠密计算输入与内核之间沿输入的最后一个轴和内核的轴1的点积(使用tf.tensordot)。例如,如果输入具有维度(批次大小,d0,d1),则我们创建具有形状(d1,单位)的内核,内核沿输入轴2对形状(1,1,d1)的每个子张量进行操作(有batch_size*d0这样的子张量)。这种情况下的输出将具有形状(batch_size,d0,units)
关于嵌入层的输出的另一点。正如您所说,这是一个3D输出,但形状正确对应(批次大小、输入尺寸、嵌入尺寸)谢谢您的回答。因此,在这种情况下,通过对密集层的输入进行展平be(30*50,75)=>(1500,75)
。在这种情况下,如果致密层的权重矩阵
的形状是(200,75)
,我不明白计算是如何进行的,以及重塑的。你能解释一下吗?