畅游人工智能之海--Keras教程之融合层

畅游人工智能之海--Keras教程之融合层

各位读者大家好,上周我们已经详细讲解了Keras的卷积层和池化层,相信大家经过学习已经对两者有了一个清晰的认识,也能更好地把它们运用到图像处理中。池化层和卷积层是非常重要的网络层类型,大家在学习之后也需要动手实践去更好地理解它们。鉴于上周学习了比较难的网络层,那么今天我们就来放松一下,学习Keras中比较简单的融合层。让我们开始今天的学习吧

Add层
1
keras.layers.Add()

作用:

计算输入张量列表的和。

输入尺寸:

它接受一个张量的列表, 所有的张量必须有相同的输入尺寸, 然后返回一个张量(和输入张量尺寸相同)。

输出尺寸:

一个张量,与输入张量列表的张量尺寸一致。

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 added = keras.layers.add([x1, x2])
# 将x1和x2两个张量相加,得到与两者尺寸相等的输出向量
added = keras.layers.Add()([x1, x2])
Subtract
1
keras.layers.Subtract()

功能:

计算两个输入张量的差。

输入尺寸:

它接受一个长度为 2 的张量列表, 两个张量必须有相同的尺寸,然后返回一个值为 (inputs[0] - inputs[1]) 的张量, 输出张量和输入张量尺寸相同。

输出尺寸:

一个张量,与输入张量列表的张量尺寸一致。

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 subtracted = keras.layers.subtract([x1, x2])
# 使用x1张量减去x2,最终得到一个尺寸与两者相同的张量
subtracted = keras.layers.Subtract()([x1, x2])
Multiply
1
keras.layers.Multiply()

功能:

计算输入张量列表的(逐元素间的)乘积。

输入大小:

它接受一个张量的列表, 所有的张量必须有相同的输入尺寸, 然后返回一个张量(和输入张量尺寸相同)。

输出大小:

一个张量,与输入张量列表的张量尺寸一致。

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 multiplied= keras.layers.multiply([x1, x2])
# 使用x1张量乘x2,最终得到一个尺寸与两者相同的张量
multiplied = keras.layers.Multiply()([x1, x2])
Average
1
keras.layers.Average()

功能:

计算输入张量列表的平均值。

输入:

它接受一个张量的列表, 所有的张量必须有相同的输入尺寸, 然后返回一个张量(和输入张量尺寸相同)。

输出:

一个张量,与输入张量列表的张量尺寸一致。

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 averaged= keras.layers.average([x1, x2])
# 使用x1张量乘x2,最终得到一个尺寸与两者相同的张量
averaged = keras.layers.Average()([x1, x2])
Maximum
1
keras.layers.Maximum()

功能:

计算输入张量列表的(逐元素间的)最大值。

输入尺寸:

它接受一个张量的列表, 所有的张量必须有相同的输入尺寸, 然后返回一个张量(和输入张量尺寸相同)。

输出尺寸:

一个张量,与输入张量列表的张量尺寸一致。

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 maximum= keras.layers.maximum([x1, x2])
# 输出为x1和x2中的最大值
maximum = keras.layers.Maximum()([x1, x2])
Concatenate
1
2
3
keras.layers.Concatenate(
axis=-1 #连接的轴
)

功能:

连接一个输入张量的列表。

输入尺寸:

它接受一个张量的列表, 除了连接轴之外,其他的尺寸都必须相同, 然后返回一个由所有输入张量连接起来的输出张量。

输出尺寸:

列表中所有张量根据连接轴连接之后形成的张量大小

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 concatenated= keras.layers.concatenate([x1, x2])
# 将x1和x2连接起来
concatenated = keras.layers.Concatenate()([x1, x2])
Dot
1
2
3
4
keras.layers.Dot(
axes, #整数或者整数元组,一个或者几个进行点积的轴
normalize=False #是否在点积之前对即将进行点积的轴进行 L2 标准化。 如果设置成 True,那么输出两个样本之间的余弦相似值
)

功能:

计算两个张量之间样本的点积。

输入尺寸:

它接受一个长度为 2 的张量列表, 两个张量必须有相同的尺寸,假设两个张量分别为a和b,则返回一个值为∑(a[i] + b[i])的张量。

输出尺寸:

(batch_size,1)

例子:

1
2
3
4
5
6
7
input1 = keras.layers.Input(shape=(16,))
x1 = keras.layers.Dense(8, activation='relu')(input1)
input2 = keras.layers.Input(shape=(32,))
x2 = keras.layers.Dense(8, activation='relu')(input2)
# 相当于 doted= keras.layers.dot([x1, x2])
# 将x1和x2做点积并输出
doted = keras.layers.Dot()([x1, x2])

相信大家经过今天的学习,能够对融合层的类型和功能有一个清晰的认知,融合层也是重要的网络层,虽然简单但很重要,它在构造结构复杂的Model类模型中起到了很重要的作用,所以希望各位能亲手实践以对它有更好地认识,大家一起加油!