Ken*_*ihe 2 python artificial-intelligence machine-learning neural-network tensorflow
编辑我的问题是我的过滤器的宽度和高度,我误解了API文档...现在正在进行修正
解决方案:从关注卷积这里载片53
我有一个类似的问题,因为在这里,但它是一个有点funkier.
我的错误是Conv2DBackpropInput: Number of rows of out_backprop doesn't match computed: actual = 25, computed = 26在优化器初始化时.
...所以它关闭1?
一些背景......
我有一个带尺寸的转换图层 <tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>
输入图像是200x200,我有3个maxpool图层 - 因此h = w = 25.我想添加3个deconv图层,以便返回原始分辨率(我正在进行图像分割).
deconv代码如下:
temp_batch_size = tf.shape(x)[0]
# output_shape = tf.pack([temp_batch_size, 50, 50, 64])
output_shape = [temp_batch_size, 50, 50, 64]
conv4 = tf.nn.conv2d_transpose(conv3, weights['wdc1'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv4 = tf.nn.local_response_normalization(conv4)
# output_shape = tf.pack([temp_batch_size, 100, 100, 32])
output_shape = [temp_batch_size, 100, 100, 32]
conv5 = tf.nn.conv2d_transpose(conv4, weights['wdc2'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv5 = tf.nn.local_response_normalization(conv5)
# output_shape = tf.pack([temp_batch_size, 200, 200, 1])
output_shape = [temp_batch_size, 200, 200, 1]
conv6 = tf.nn.conv2d_transpose(conv5, weights['wdc3'], output_shape=output_shape, strides=[1,1,1,1], padding="VALID")
# conv6 = tf.nn.local_response_normalization(conv6)
Run Code Online (Sandbox Code Playgroud)
(你可以看到我试图tf.pack()没有成功 - 正如这里推荐的那样)重量在哪里:
'wdc1' : tf.Variable(tf.random_normal([25, 25, 64,128])),
'wdc2' : tf.Variable(tf.random_normal([50, 50, 32,64])),
'wdc3' : tf.Variable(tf.random_normal([100, 100, 1,32])),
Run Code Online (Sandbox Code Playgroud)
一些调试看起来像这样:
(Pdb) conv3
<tf.Tensor 'MaxPool_2:0' shape=(?, 25, 25, 128) dtype=float32>
(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(?, ?, ?, ?) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(?, ?, ?, ?) dtype=float32>
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪,因为我有这条线temp_batch_size = tf.shape(x)[0](这里推荐),最后3个尺寸也是问号?如果我将第一个维度更改为常量(例如10),我会得到<tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>
那么也许这是我的问题的一部分?如果我将其更改回常量,batch_size那么我ValueError: Shapes (10, 101, 101, 32) and (10, 100, 100, 32) are not compatible在优化器初始化时得到错误.再一次,一个接一个.
使用此配置进行调试...
(Pdb) conv4
<tf.Tensor 'conv2d_transpose:0' shape=(10, 50, 50, 64) dtype=float32>
(Pdb) conv5
<tf.Tensor 'conv2d_transpose_1:0' shape=(10, 100, 100, 32) dtype=float32>
(Pdb) conv6
<tf.Tensor 'conv2d_transpose_2:0' shape=(10, 200, 200, 1) dtype=float32>
Run Code Online (Sandbox Code Playgroud)
这个问题是我的进步吗?它们应该是什么(我尝试过不同的变化而没有成功)
使用转置卷积时,您需要反思:在给定输出(形状)的情况下,您将如何获得(conv3形状[batch_size, 25, 25, 128])输入[batch_size, 200, 200, 1]?
你会做一系列3x3卷积和最大池化.不幸的是,在TensorFlow中尚未提供解放,因此您只需转换卷积.
滤波器应具有正常的CNN形状:如3x3卷积或5x5.如果要增加输出大小,则需要使用跨步转置卷积.
weights = {
'wdc1' : tf.Variable(tf.random_normal([3, 3, 64, 128])),
'wdc2' : tf.Variable(tf.random_normal([3, 3, 32, 64])),
'wdc3' : tf.Variable(tf.random_normal([3, 3, 1, 32]))
}
Run Code Online (Sandbox Code Playgroud)
和代码(不要忘记stride = 2):
temp_batch_size = 10
conv3 = tf.zeros([temp_batch_size, 25, 25, 128])
output_shape = [temp_batch_size, 50, 50, 64]
conv4 = tf.nn.conv2d_transpose(conv3, weights['wdc1'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")
output_shape = [temp_batch_size, 100, 100, 32]
conv5 = tf.nn.conv2d_transpose(conv4, weights['wdc2'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")
output_shape = [temp_batch_size, 200, 200, 1]
conv6 = tf.nn.conv2d_transpose(conv5, weights['wdc3'], output_shape=output_shape, strides=[1,2,2,1], padding="SAME")
Run Code Online (Sandbox Code Playgroud)
编辑:
刚看到你的编辑.来自CS231n 的幻灯片是如何使用转置卷积的非常好的例证,它甚至更好地与视频!
| 归档时间: |
|
| 查看次数: |
5773 次 |
| 最近记录: |