python - 我可以在 CNN 中展平后添加数据吗?
问题描述
我正在与 CNN 合作,我的教授希望我尝试包含一些相关的信息,但在图像本身中不可用。截至目前,数据是一维数组。他认为在扁平化层之后和密集层之前添加它应该是可能的,但是我们都还没有足够的知识。
model = Sequential()
for i, feat in enumerate(args.conv_f):
if i==0:
model.add(Conv2D(feat, input_shape=x[0].shape, kernel_size=3, padding = 'same',use_bias=False))
else:
model.add(Conv2D(feat, kernel_size=3, padding = 'same',use_bias=False))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=args.conv_act))
model.add(Conv2D(feat, kernel_size=3, padding = 'same',use_bias=False))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=args.conv_act))
model.add(Dropout(args.conv_do[i]))
model.add(Flatten())
#Input code here
denseArgs = {'use_bias':False}
for i,feat in enumerate(args.dense_f):
model.add(Dense(feat,**denseArgs))
model.add(BatchNormalization())
model.add(LeakyReLU(alpha=args.dense_act))
model.add(Dropout(args.dense_do[i]))
model.add(Dense(1))
显然,我们可能是错的,所以任何帮助表示赞赏!谢谢!
解决方案
我知道的一种方法需要使用 keras 的功能 API。这意味着您将不得不放弃您当前使用的顺序方法。
以玩具模型为例,让集团:
img_input = Input((64, 64, 1))
model = Conv2D(20, (5, 5))(img_input)
model = MaxPooling2D((2, 2))(model)
model = Flatten()(model)
是具有最终展平的 CNN 的卷积层。可以通过将最后一个模型层与新信息连接来添加信息。新信息可以通过创建一个只有输入层的短模型(此处为 af_input)来打包。
举个例子:
af_input = Input(shape=(2,))
model = Concatenate()([model, af_input])
model = Dense(120, activation='relu')(model)
model = Dropout(0.1)(model)
model = Dense(100, activation='relu')(model)
predictions = Dense(2)(model)
fullmodel = Model(inputs=[img_input,af_input], outputs=predictions)
所以现在 CNN 的 flatten 层的结果将与一个额外信息的向量(这里是 2 个特征)连接起来。
然后,您可以像往常一样继续向网络添加层。
我建议您查看stackoverflow链接: 如何在keras中连接两层?
另一个例子和一个很好的解释。
推荐阅读
- microservices - 将用户分配给微服务架构中的特定资源实体
- java - 如何在 JTable 中获取 JComboBox 中的 ID 和值
- android - 当用户解锁屏幕时,如何在 Oreo 中运行后台工作?
- javascript - 如何在 jquery html 字符串中包含内联 onclick
- c++ - 如何将boost回调作为参数传递给方法?
- python - 将黑白图像转换为数字数组?
- apache-camel - 扩展 camel http 为所有 http 请求添加公共标头
- soap - 简单的 WSDL 错误“部件 '' 为其元素定义了无效值 ''。元素声明必须引用架构中定义的有效值”
- visual-studio - 在发布模式下使用 ImageResizer FastScaling 构建的问题
- router - 在tp-link路由器上运行“opkg install tcpdump”成功刷入OpenWrt后,tcpdump命令不起作用