【发布时间】:2018-03-04 05:16:10
【问题描述】:
总的来说,我对 Keras 和 DNN 还很陌生,从一些教程开始,我设法创建了一个用于对句子进行分类的模型。模型如下所示。老实说,我不确定它背后的直觉是什么以及它为什么起作用。所以这是我的问题。
def create_model():
embedding_layer = Embedding(input_dim=100, output_dim=300,
input_length=100)
model = Sequential()
model.add(embedding_layer)
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(1, activation='sigmoid'))
###### multiclassification #########
model.add(Dense(3, activation='sigmoid')) #I want to replace the above line with this for multi-classification but this didnt work
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
这是我的理解:该模型从训练语料库(句子)上的词嵌入开始,并将每个句子表示为词向量的向量(embedding_layer)。然后 dropout 层强制模型不依赖特定的单词。卷积具有识别短语/n-gram 的类似效果,而不仅仅是单个单词。然后一个 LSTM 跟随学习可能有用的特征的短语/n-gram 序列;然后Globalmaxpooling1D 层将 LSTM 输出“展平”,作为最终分类(密集层)的特征。
这有意义吗?我也不太了解maxpooling1D 层和lstm 层之间的交互。 input_shape 到 lstm 是什么,输出是什么样的?
【问题讨论】:
标签: python machine-learning neural-network keras deep-learning