Keras:将模型展平输出与

2024-04-26 14:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Keras模型定义如下:

model = Sequential()
model.add(embedding_layer)
model.add(Conv1D(filters=256, kernel_size=3, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=3))
model.add(Flatten())
model.add(Dense(num_classes, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')

Flatten()层之后,我想连接2个附加特性,即如果Flatten()给我一个大小为(1,n)(model.output_shape == (None, n))的向量,我想连接一个大小为(1,2)somodel.output_shape == (None, n+2)的单独的numpy数组。我该怎么做呢?在

我想^{}就是我在这里寻找的,但是我不知道如何实现它。网上的例子不多,Keras2.0也使用了更新的语法。如有任何帮助,将不胜感激。在


Tags: 模型noneaddlayeroutputsizemodel定义
2条回答

我没有测试过这段代码,但是我做了something similar并且它起作用了(虽然可能不是最有效的方法):

model = Sequential()
model.add(embedding_layer)
model.add(Conv1D(filters=256, kernel_size=3, activation='relu', padding='same'))
model.add(MaxPooling1D(pool_size=3))
model.add(Flatten())

auxiliary_input = Input(shape=(2,), name='aux_input')
final_model = Sequential()
final_model.add(Merge([model, auxiliary_input], mode='concat'))
final_model.add(Dense(num_classes, activation='sigmoid'))
final_model.compile(loss='binary_crossentropy', optimizer='adam')

还有一个part of doc,它给出了有多个输入(也有多个输出)但使用旧的API使用方式的示例。在

我玩了一会儿,想明白了。对于任何感兴趣的人:这是Keras的函数API的一个很好的用例,它总是返回张量,您可以对其进行张量操作。在

embedded_sequence = embedding_layer(sequence_input)
x = Conv1D(filters=256, kernel_size=3, activation='relu', padding='same')(embedded_sequence)
x = MaxPooling1D(pool_size=3)(x)
x = Flatten()(x)

# additional features input
from keras.layers.merge import Concatenate
af_input = Input(shape=(data['af_train'].shape[1],), name='af_input')
x = Concatenate()([x, af_input])

# output
main_output = Dense(num_classes, activation='sigmoid', name='main_output')(x)

model = Model(inputs=[sequence_input, af_input], outputs=main_output)
model.compile(loss='binary_crossentropy', optimizer='adam')

相关问题 更多 >