我正在绘制一个图表来表示以下网络(使用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'])
这是我创建的图表。这是对的吗?
答案 0 :(得分:1)
在形状方面似乎对我来说非常正确:
(None,50,300)
(None, 50, 100)
(None,12,100)
(None,12,100)
(None,100)
(None,n)
您可以检查model.summary()
中的所有输出形状。
红色和蓝色矩形:
关于描述卷积的红色和蓝色矩形,每个通道将从300个输入通道生成100个通道。所以红色和蓝色目标覆盖了整个100个输出通道。
此外,由于蓝色矩形是红色右侧的两个步骤,因此其输出也将向右两步。卷积长度逐步走1,除非您将stride
设置为更大的数字。我在下面添加了另一个矩形,以确保步幅被理解为1.
阴影矩形:
我知道这两个没有用线连接,但它可能会让人们认为LSTM之前的阴影矩形与LSTM之后的阴影有关。
所以也许改变他们的颜色?
图片右侧的图层标识:
我认为你可以将图表右侧的1D Convolution
标签向上移动一点,因为我将它与嵌入混淆。