python - 无法在 keras 中连接两个输入层。
问题描述
我正在尝试使用以下代码:
import tensorflow as tf
from keras.layers import Input, Dense
from keras.models import Model, Sequential
from keras.layers import Conv2D, Concatenate
from keras.utils.vis_utils import plot_model
if __name__ == '__main__':
imgRows = imgCols = 28
print ("ImgRow and imgCols " , imgRows, imgCols)
inputLayer = Input(shape=( 1,28,28))
conv1 = Conv2D(64,(3,3),strides=1, padding="same", activation='relu') (inputLayer)
#Residual 1
skip = Conv2D(128, (1,1), strides=1, padding="same", activation='relu') (conv1)
conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (skip)
conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (conv1)
r1= Concatenate([skip, conv1])
#residual 2
conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (r1)
conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (conv1)
conv1= Concatenate([r1, conv1])
# Residual 3
skip = Conv2D(256, (1,1), strides=1, padding="same", activation='relu') (conv1)
conv1 = Conv2D(256, (3,3), strides=3, padding="same", activation='relu') (conv1)
conv1 = Conv2D(256, (3,3), strides=3, padding="same", activation='relu') (conv1)
conv1= Concatenate([skip, conv1])
out = Conv2D(1, (1,1), strides=1, padding="same", activation='sigmoid') (conv1)
#model = Sequential()
#model.add (inputLayer)
#model.add ( conv1)
model = Model(input=inputLayer, output=conv1)
model.compile(optimizer=Nadam(lr=1e-5), loss="mean_square_error")
plot_model (model, to_file="./keestu_model.png", show_shapes=True)
我收到以下错误:
错误信息是:
ValueError: Layer conv2d_5 was called with an input that isn't a
symbolic tensor. Received type: <class 'keras.layers.merge.Concatenate'>.
Full input: [<keras.layers.merge.Concatenate object at 0x7fd543841590>].
All inputs to the layer should be tensors.
问题?:
错误消息对我来说非常清楚,第 5 层期望其输入作为张量对象而不是连接对象。但是我该如何解决呢?
解决方案
那是因为Concatenate
是一个具有两个 API 版本的层类:
Concatenate()([tensor1, tensor2])
创建一个新的连接实例并应用于给定的张量。这是标准的函数式 API 风格。concatenate([tensor1, tensor2])
将实现相同的目标,但会为您创建一个隐式实例。从文档中:keras.layers.concatenate(inputs, axis=-1):连接层的功能接口。
顺便说一下,为了方便,所有合并层都有这个双重接口。
推荐阅读
- python - 使用嵌套的 for 循环将方形数组和行数组相乘
- flutter - 从 DropdownItems 中选择值后,DropdownButton 值未更新。如何使用 selectedLocation 更新默认值?
- awk - 如何找到第一次匹配的记录并稍后与 awk 一起使用
- html - 当滚动行为在 Chrome 中的 html 标记上设置为“平滑”时,HTML5 表单验证消息不显示
- html - 如何使用 CSS 填充悬停时的 SVG 路径?
- kubernetes - 如何在 Kubernetes 和宿主机中共享目录和后续子目录
- python - Python Flask:如何从下拉列表中获取文件名
- java - Java如何创建新的HashMap并从中删除
- csv - LOAD CSV:多个 MERGE 和 Eager 运算符
- amazon-web-services - AWS:将日志从 Cloudwatch 导出到 Amazon S3 的权限