如何向keras中的中间层提供输入

如何向keras中的中间层提供输入,keras,keras-layer,Keras,Keras Layer,我想使用预先训练vgg-19后弹出最后一层,然后添加2个FC(密集)层。我想给其中一个FC层输入一个二进制变量(男性或女性)。如何实现它。您需要的是一个两输入一输出的网络,其中每个输入都有自己的特征提取,并且在预测最终输出之前将两个特征融合 下面是一个例子 导入keras 从keras.applications.vgg19导入vgg19 从keras.layers导入输入、密集、连接 从keras.models导入模型 #-------------------------------------

我想使用预先训练vgg-19后弹出最后一层,然后添加2个FC(密集)层。我想给其中一个FC层输入一个二进制变量(男性或女性)。如何实现它。

您需要的是一个两输入一输出的网络,其中每个输入都有自己的特征提取,并且在预测最终输出之前将两个特征融合

下面是一个例子

导入keras
从keras.applications.vgg19导入vgg19
从keras.layers导入输入、密集、连接
从keras.models导入模型
#-------------------------------------------------------------------------------
#定义您的新输入
#在这里,我假设您的新任务是一个超过100个类的分类任务
#-------------------------------------------------------------------------------
性别输入=输入(形状=(1),名称='性别输入')
image\u input=input(shape=(224224,3),name='image\u input')
num_classes=100
#-------------------------------------------------------------------------------
#定义预训练的特征提取
#你可以做一些不同于下面的事情
#但这里的重点是要有一个“featex”的预训练模型`
#所以你可以用不同的定义
#-------------------------------------------------------------------------------
预训练=VGG19()
featex=Model(pretrained.input,pretrained.layers[-2]。output,name='vgg\u pop\u last')
在加速训练中考虑将所有权值冻结在ExtEX中
image\u feat=featex(image\u输入)
#-------------------------------------------------------------------------------
#从这里,您可以使用不同的网络体系结构
#下面只是一个例子
#-------------------------------------------------------------------------------
image\u feat=Dense(128,activation='relu',name='image\u fc')(image\u feat)
性别专长=密集(16,激活='relu',名称='gender\u fc')(性别输入)
#从两种信息中混合信息
#注:串联只是混合信息的一种可行方法
concat_feat=连接(axis=-1,name='concat_fc')([image_feat,gender_feat])
#执行最终预测
目标=密集(num_类,activation='softmax',name='pred_类')(concat_专长)
#-------------------------------------------------------------------------------
#这是您的新模型,它包含两个输入和一个新目标
#-------------------------------------------------------------------------------
模型=模型(输入=[image\u input,gender\u input],输出=目标,name='myModel')
打印model.summary()

如果您想从第5层重新使用旧模型的层作为新模型输出,您需要像这样重建模型,关键是定义一个输入,并将其传递到第5层。可能是这样的:

FC=…#您的FC层
旧模型=模型。加载模型(模型目录)
旧的_model.layers.pop(-1)#去掉分类层
对于范围(4)中的i:#去掉前4层
old_model.layers.pop(0)#迭代时关心pop索引
输入=输入(形状=(输入尺寸)
新模型=模型(输入=输入,输出=FC(旧模型(输入)))