UpSampling2D
看tf文档中的解析:
tf.keras.layers.UpSampling2D:Upsampling layer for 2D inputs.
在一个2D输入中进行上采样操作,其实就是复制并且扩展相应的维度。
UpSampling3D
既然有2D和3D之分,对于"channels_last"的数据格式(batch, rows, cols, channels),猜想是UpSampling2D扩展rows, cols,而UpSampling3D可以扩展rows, cols, channels三个维度。
验证
def up_suampling_2D():
model = Sequential()
model.add(layers.UpSampling2D(size=(3, 2), input_shape = ((3, 3, 1))))
return model
参数size,看文档的解析:
size: Int, or tuple of 2 integers. The upsampling factors for rows and columns.
接受一个由两个整数组成的tuple,第一个整数表示rows方向的扩展倍数,第二个表示columns方向的扩展倍数。 (输入int应该是两个方向的扩展倍数都是int)
def test():
model = up_suampling_2D()
data_test = np.arange(9).reshape((1, 3, 3, 1))
predict_result = model.predict(data_test)
print(data_test)
print(predict_result)
便于观察,测试数据data_test 是一个 0-8的4维矩阵。以上输出的结果为:
data_test:
[[
[[0],[1],[2]],
[[3],[4],[5]],
[[6],[7],[8]],
]]
predict_result:
[[
[[0.], [0.].[1.],[1.],[2.],[2.]],
[[0.], [0.].[1.],[1.],[2.],[2.]],
[[0.], [0.].[1.],[1.],[2.],[2.]],
[[3.],[3.],[4.],[4.],[5.],[5.]],
[[3.],[3.],[4.],[4.],[5.],[5.]],
[[3.],[3.],[4.],[4.],[5.],[5.]],
[[6.],[6.],[7.],[7.],[8.],[8.]],
[[6.],[6.],[7.],[7.],[8.],[8.]],
[[6.],[6.],[7.],[7.],[8.],[8.]],
]]
可以发现 行扩展了3倍,列扩展了2倍(size =(3,2))。
接下来试一下UpSampling3D:
def up_suampling_3D():
model = Sequential()
model.add(layers.UpSampling3D(size=(3, 2, 2), input_shape = ((3, 3, 1))))
return model
因为是3D所以size也需要多加channels维度,表示在通道方向上的扩展倍数。
predict_result:
[[
[[0., 0.], [0., 0.].[1.,1.],[1.,1.],[2.,2.],[2.,2.]],
[[0., 0.], [0., 0.].[1.,1.],[1.,1.],[2.,2.],[2.,2.]],
[[0., 0.], [0., 0.].[1.,1.],[1.,1.],[2.,2.],[2.,2.]],
[[3.,3.],[3.,3.],[4.,4.],[4.,4.],[5.,5.],[5.,5.]],
[[3.,3.],[3.,3.],[4.,4.],[4.,4.],[5.,5.],[5.,5.]],
[[3.,3.],[3.,3.],[4.,4.],[4.,4.],[5.,5.],[5.,5.]],
[[6.,6.],[6.,6.],[7.,7.],[7.,7.],[8.,8.],[8.,8.]],
[[6.,6.],[6.,6.],[7.,7.],[7.,7.],[8.,8.],[8.,8.]],
[[6.,6.],[6.,6.],[7.,7.],[7.,7.],[8.,8.],[8.,8.]],
]]
可以发现通道方向也扩展了2倍。
PS:推断keras或者tensorflow对矩阵数据的处理方式是先处理channels维度,再处理cols最后是rows维度。也可以说处理顺序是从高维到低维。