keras 中padding 的 same,valid 的两种方式以及验证

1 篇文章 0 订阅
1 篇文章 0 订阅

keras 中padding 的 same,valid 的两种方式以及验证

输入数据
input_shape = (批量,高,宽,通道)

import numpy as np
import tensorflow as tf
input_shape = (1, 4, 4, 1)
x = np.arange(np.prod(input_shape)).reshape(input_shape).astype(np.float64)

(1)构建 padding= “same” 的卷积层并计算

initializer = tf.keras.initializers.Constant(2.)
y = tf.keras.layers.Conv2D(1, 4, strides=(3,3),input_shape=input_shape[1:], kernel_initializer=initializer, padding= "same")(x)

输出y 和 x

y
Out[16]: 
<tf.Tensor: shape=(1, 2, 2, 1), dtype=float32, numpy=
array([[[[ 90.],
         [ 78.]],

        [[132.],
         [100.]]]], dtype=float32)>
x
Out[17]: 
array([[[[ 0.],
         [ 1.],
         [ 2.],
         [ 3.]],

        [[ 4.],
         [ 5.],
         [ 6.],
         [ 7.]],

        [[ 8.],
         [ 9.],
         [10.],
         [11.]],

        [[12.],
         [13.],
         [14.],
         [15.]]]])

总结:
一共需要填充三行三列的0
计算y[1][0][0][1]:(0+1+2+4+5+6+8+9+10)*2 = 90; 左上侧填充一行一列
计算y[1][1][1][1]:(10+11+14+15)*2 = 100; 右下侧填充两行两列

(2)构建 padding= “valid” 的卷积层并计算,改变步长 strides=(3,3)

y = tf.keras.layers.Conv2D(1, 2, strides=(3,3),input_shape=input_shape[1:], kernel_initializer=initializer, padding= "valid")(x)

输出 y

y
Out[21]: <tf.Tensor: shape=(1, 1, 1, 1), dtype=float32, numpy=array([[[[20.]]]], dtype=float32)>

总结:
padding= “valid” 的时候剔除边界像素在右下方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值