如何解决在 LeNet 中用于将 28X28 输入图像转换为 32X32 图像的逻辑是什么?
我使用的是 MNIST 数据,它的图像大小为 28X28 像素,我使用填充将其转换为 32X32 像素,如下所示:
tf.pad(tensor=X_train,paddings=[[0,0],[2,2],2]])
输出结果是正确的。
TensorShape([60000,32,32])
我想了解 [0,2] 和 [2,2] 到底是什么意思?这里的顶部、底部、左侧和右侧填充是什么?数字代表什么?
解决方法
来自https://www.tensorflow.org/api_docs/python/tf/pad:
此操作根据您指定的填充来填充张量。 paddings 是一个形状为 [n,2] 的整数张量,其中 n 是张量的秩。对于输入的每个维度 D,paddings[D,0] 表示在该维度中在张量内容之前添加多少个值,paddings[D,1] 表示在该维度中在张量内容之后添加多少个值。
这里有一个等级为 3 的张量。维度 0 是批次维度,您有 28 x 28 张量。维度 1 和 2 对应于输入张量的高度和宽度。在这些维度中,您在原始行/列之前和之后添加 2 个元素,这使得输出形状 = 28 + 2 + 2 = 32。
例如,top 和 bottom 填充由 paddings[1]
指定,它将 28 x 28 张量填充到顶部 2 个零和 2 个零底端。同样,paddings[2]
提供 left 和 right 填充量。
看这个例子可以更清楚地理解:
>>> import tensorflow as tf
# create a random tensor of shape 2 x 2 x 2
X = tf.random.uniform(shape=[2,2,2])
>>> X
<tf.Tensor: shape=(2,2),dtype=float32,numpy=
array([[[0.60002756,0.5554304 ],[0.15563118,0.75253165]],[[0.983318,0.4908601 ],[0.16791439,0.55565095]]],dtype=float32)>
# pad along batch dimension
>>> tf.pad(tensor = X,paddings = [[1,1],[0,0],0]])
<tf.Tensor: shape=(4,numpy=
array([[[0.,0. ],[0.,0. ]],[[0.60002756,0.55565095]],[[0.,0. ]]],dtype=float32)>
# pad along height/rows
>>> tf.pad(tensor = X,paddings = [[0,[1,0]])
<tf.Tensor: shape=(2,4,[0.60002756,0.75253165],[0.983318,0.55565095],dtype=float32)>
# pad along width/columns
>>> tf.pad(tensor = X,1]])
<tf.Tensor: shape=(2,4),0.60002756,0.5554304,0.15563118,0.75253165,0.983318,0.4908601,0.16791439,0.55565095,dtype=float32)>
注意上面的张量形状在每种填充操作后是如何变化的。
由于在您的情况下,您不希望批次中有多余的归零样本,因此您在批次维度上有 [0,0]。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。