keras - 如何在keras中向中间层提供输入
问题描述
我想在弹出最后一层然后添加 2 个 FC(Dense) 层后使用预训练的 vgg-19。我想为这些 FC 层之一提供一个二进制变量(男性或女性)的输入。我怎样才能实现它。
解决方案
你需要一个双输入单输出网络,其中每个输入都有自己的特征提取,并且在预测最终输出之前融合了两个特征。
下面是一个例子。
import keras
from keras.applications.vgg19 import VGG19
from keras.layers import Input, Dense, Concatenate
from keras.models import Model
#-------------------------------------------------------------------------------
# Define your new inputs
# Here I pretend that your new task is a classification task over 100 classes
#-------------------------------------------------------------------------------
gender_input = Input(shape=(1,), name='gender_input')
image_input = Input(shape=(224,224,3), name='image_input')
num_classes = 100
#-------------------------------------------------------------------------------
# define your pretrained feature extraction
# you may do something different than below
# but the point here is to have a pretrained model for `featex`
# so you may define it differently
#-------------------------------------------------------------------------------
pretrained = VGG19()
featex = Model( pretrained.input, pretrained.layers[-2].output, name='vgg_pop_last' )
# consider to freeze all weights in featex to speed-up training
image_feat = featex( image_input )
#-------------------------------------------------------------------------------
# From here, you may play with different network architectures
# Below is just one example
#-------------------------------------------------------------------------------
image_feat = Dense(128, activation='relu', name='image_fc')( image_feat )
gender_feat = Dense(16, activation='relu', name='gender_fc')( gender_input )
# mix information from both information
# note: concatenation is only one of plausible way to mix information
concat_feat = Concatenate(axis=-1,name='concat_fc')([image_feat, gender_feat])
# perform final prediction
target = Dense(num_classes, activation='softmax', name='pred_class')( concat_feat )
#-------------------------------------------------------------------------------
# Here is your new model which contains two inputs and one new target
#-------------------------------------------------------------------------------
model = Model( inputs=[image_input, gender_input], outputs=target, name='myModel')
print model.summary()
推荐阅读
- rust - 无法返回可变的自我借用
- postgresql - Postgres 在 FOR 循环中访问行值
- regex - RegEx - 仅匹配开头有美元符号的字符串
- amazon-web-services - AWS CodeDeploy 无法部署 lambda 函数
- python - 如何将http附加到每个url的文本文件
- spring - Spring+Hibernate 我是否必须创建一个模型来存储和获取数据?
- tensorflow - 批量归一化与批量重归一化
- sql-server - SQL server 中的 OUTPUT $action,将更新后的行输出封装为特定列
- java - Java EE Maven 无法将工件 MANUAL.com.sun.messaging:imq:pom:4.1 从/传输到 java.net
- python - Selenium:从下拉菜单中选择