Как добавить svm поверх cnn в качестве окончательного классификатора? - PullRequest
0 голосов
/ 01 января 2019

Я работаю над задачей анализа настроений и хочу добавить слой SVM поверх CNN в качестве окончательного классификатора. Как я могу это сделать, не используя hing-loss?

tweet_input = Input(shape=(seq_len,), dtype='int32')

tweet_encoder = Embedding(vocabulary_size, EMBEDDING_DIM, 
input_length=seq_len, trainable=True)(tweet_input)
bigram_branch = Conv1D(filters=64, kernel_size=2, padding='same', 
activation='relu', strides=1)(tweet_encoder)
bigram_branch = GlobalMaxPooling1D()(bigram_branch)
trigram_branch = Conv1D(filters=32, kernel_size=3, padding='same', 
activation='relu', strides=1)(tweet_encoder)
trigram_branch = GlobalMaxPooling1D()(trigram_branch)
fourgram_branch = Conv1D(filters=16, kernel_size=4, padding='same', 
activation='relu', strides=1)(tweet_encoder)
fourgram_branch = GlobalMaxPooling1D()(fourgram_branch)
merged = concatenate([bigram_branch, trigram_branch, fourgram_branch], axis=1)
merged = Dense(512, activation='softmax')(merged)
merged = Dropout(0.8)(merged)
merged = Dense(2)(merged)
output = Activation('sigmoid')(merged)
model = Model(inputs=[tweet_input], outputs=[output])

adam=keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(loss='hinge',
              optimizer= adam,
              metrics=['accuracy'])
model.summary()
...