Keras 画一张图表来说明这个cnn+;lstm网络

Keras 画一张图表来说明这个cnn+;lstm网络,keras,Keras,我正在绘制一张图表来表示我用于句子分类的以下网络(使用keras编程): model = Sequential() model.add(embedding_layer) # this layer represents each sentence as a length of 50 words, each having 300 dimensions model.add(Dropout(0.2)) model.add(Conv1D(filters=100, kernel_size=4, paddin

我正在绘制一张图表来表示我用于句子分类的以下网络(使用keras编程):

model = Sequential()
model.add(embedding_layer) # this layer represents each sentence as a length of 50 words, each having 300 dimensions
model.add(Dropout(0.2))
model.add(Conv1D(filters=100, kernel_size=4, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(LSTM(units=100, return_sequences=True))
model.add(GlobalMaxPooling1D())
model.add(Dense(4, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

这是我创建的图表。对吗

就形状而言,我觉得非常正确:

  • 嵌入:一个包含50个单词、300个特征的矩阵。形状
    (无,50300)
  • 卷积:保留50个字(padding='same'),创建100个通道(100个过滤器各一个)。形状
    (无、50、100)
  • 最大池(4):长度除以50/4,剩余12(四舍五入,但检查模型摘要中的12或13)。保留100个频道。形状
    (无,12100)
  • LSTM(100):考虑12个步骤和100个特征,输出12个步骤(返回序列=True)并保留100个特征(单位=100)。形状
    (无,12100)
  • 全局扩展工具:=删除长度,只保留100个特征。形状
    (无,100)
  • 密集(n):在末尾只留下n个特征。形状
    (无,n)
您可以在
model.summary()
中检查所有输出形状

红色和蓝色矩形:

关于描述卷积的红色和蓝色矩形,每个过程将从300个输入通道生成100个通道。因此,红色和蓝色目标覆盖了整个100个输出通道

此外,由于蓝色矩形在红色的右边两步,因此其输出也将在右边两步。卷积的长度为1乘1,除非将
步长设置为更大的数字。我在下面添加了另一个矩形,以确保步幅理解为1

阴影矩形:

我知道这两个不是直线相连的,但这可能会让人们认为LSTM之前的阴影矩形与LSTM之后的阴影矩形有关

那么也许可以改变他们的颜色

图片右侧的图层标识:

我想你可以把图右边的
1D卷积
标签向上移动一点,因为我把它和嵌入混淆了


谢谢,这是非常好的细节。关于“红色和蓝色矩形”,步幅确实是1,所以红色和蓝色框应该有1列的间距,这样就不会产生误导,对吗?此外,“输入通道”是否与“过滤器”相同?原则上,我知道基本上300变为100是因为这个“过滤器”设置,但实际上我不确定到底发生了什么来减少这个。理想情况下,你应该将蓝色矩形向左移动一个像素。运动一个接一个地进行。在当前图像中,蓝色框距离红色有两步之遥。输入通道与过滤器不同(我稍微更正了我的文本)。但是卷积层中输出通道的数量等于它拥有的滤波器的数量。每个过滤器将收集所有输入通道并创建一个输出通道。