绘制图表来说明这个cnn + lstm网络

时间:2017-10-01 20:51:15

标签: 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, 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'])

这是我创建的图表。这是对的吗? diagram

1 个答案:

答案 0 :(得分:1)

在形状方面似乎对我来说非常正确:

  • 嵌入一个包含50个字,300个要素的矩阵。形状(None,50,300)
  • 卷积:保留50个单词(padding ='same'),创建100个通道(100个过滤器中的每个过滤一个)。形状(None, 50, 100)
  • MaxPooling(4):除以50/4的长度,剩余12(舍入,但检查12或13的模型摘要)。保持100个频道。形状(None,12,100)
  • LSTM(100):考虑12个步骤和100个功能,输出12个步骤(return_sequences = True)并保留100个功能(单位= 100)。形状(None,12,100)
  • GlobalMaxPooling: =删除长度,仅保留100个功能。形状(None,100)
  • 密集(n):,最后只留下n个要素。形状(None,n)

您可以检查model.summary()中的所有输出形状。

红色和蓝色矩形:

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

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

enter image description here

阴影矩形:

我知道这两个没有用线连接,但它可能会让人们认为LSTM之前的阴影矩形与LSTM之后的阴影有关。

所以也许改变他们的颜色?

enter image description here

图片右侧的图层标识:

我认为你可以将图表右侧的1D Convolution标签向上移动一点,因为我将它与嵌入混淆。

enter image description here