【实验踩坑小结】keras.layers 融合层(Merge)

关于这部分常出现的报错:
AttributeError ‘NoneType’ object has no attribute ‘_inbound_nodes’

报错原因:

只要使用Model,就必须保证该函数内全为layer而不能有其他函数,如果有其他函数必须用Lambda封装为layer。因为model函数中不允许除了layer以外的其他函数出现,所以报错。

例子:
conv1_1 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(inputs)
conv1_2 = Conv2D(64, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_normal')(conv1_1)
conv1 = tf.add([conv1_1,conv1_2])

我的本意是想将两个卷积层生成的特征图按元素相加,但是由于tf.add是函数,不是layer层的,所以表面上看无语法错误,但当模型跑起来时,会在该行报出上述的错误信息。

model = Model(inputs = inputs, outputs = conv10)

修改方法可以参考keras中文手册中keras.layers Merge层中的相关信息,此处进行一些小结。
【https://keras.io/zh/layers/merge】


1、keras.layers.Add()
    计算输入张量列表的和。它接受一个张量的列表(可以多个一起相加),所有的张量必须有相同的输入尺寸,然后返回一个张量(和输入张量尺寸相同)。
在这里插入图片描述
2、keras.layers.Subtract()
    计算两个输入张量的差。它接受一个长度为 2 的张量列表,两个张量必须有相同的尺寸,然后返回一个值为 (inputs[0] - inputs[1]) 的张量,输出张量和输入张量尺寸相同。使用格式类似于Add()。

3、keras.layers.Multiply()
    计算输入张量列表的(逐元素间的)乘积。它接受一个张量的列表,所有的张量必须有相同的输入尺寸,然后返回一个张量(和输入张量尺寸相同)。使用格式类似于Add()。

4、keras.layers.Average()
    计算输入张量列表的平均值。它接受一个张量的列表,所有的张量必须有相同的输入尺寸,然后返回一个张量(和输入张量尺寸相同)。使用格式类似于Add()。

5、keras.layers.Maximum()
    计算输入张量列表的(逐元素间的)最大值。它接受一个张量的列表,所有的张量必须有相同的输入尺寸,然后返回一个张量(和输入张量尺寸相同)。使用格式类似于Add()。

6、keras.layers.Concatenate(axis=-1)
    连接一个输入张量的列表。它接受一个张量的列表,除了连接轴之外,其他的尺寸都必须相同,然后返回一个由所有输入张量连接起来的输出张量。axis: 连接的轴。

7、keras.layers.Dot(axes, normalize=False)
    计算两个张量之间样本的点积。
    例如,如果作用于输入尺寸为(batch_size, n) 的两个张量 a 和 b,那么输出结果就会是尺寸为 (batch_size, 1) 的一个张量。在这个张量中,每一个条目 i 是 a[i] 和 b[i] 之间的点积。
    axes: 整数或者整数元组,一个或者几个进行点积的轴。normalize: 是否在点积之前对即将进行点积的轴进行 L2 标准化。如果设置成 True,那么输出两个样本之间的余弦相似值。

ps:以上所有函数,当首字母为小写时(如keras.layers.add()),参数列表将放置于括号内部,参见Add()中所举得代码例子。



参考文献:

【1】https://zhuanlan.zhihu.com/p/138075621
【2】https://keras.io/zh/layers/merge

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值