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

我正在学习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, 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)
,我不明白计算是如何进行的,以及重塑的。你能解释一下吗?