我正在尝试在 tensorflow 上重新实现 FCN。我已经实现了反卷积层。
up8_filter = tf.Variable(tf.truncated_normal([64, 64, 21, 21]))
prob_32 = tf.nn.conv2d_transpose(score, up8_filter, output_shape = [batch_size, 224, 224, 21], strides = [1, 32, 32, 1])
tf.histogram_summary('fc8_filter', up8_filter)
Run Code Online (Sandbox Code Playgroud)
训练看起来很好,损失值下降直到变成Nan. 我检查了张量板,它表明up8_filter似乎有分歧。
有没有办法规范 Tensorflow 中的权重值?
我试过以下方法
我没有按照 FCN 实现将图像填充到 100 像素,因为 Tensorflowconv2d不支持它。我使用caffe-tensorflow转换了 VGG 权重,我无法改变它的网络结构。
我很抱歉这个令人困惑的问题,有很多事情要出错,我不知道从哪里开始。
损失值的片段。
第 1 步:损失 = 732171599872.00
第 10 步:损失 = 391914520576.00
第 20 步:损失 = 32141299712.00
第 30 步:损失 = 1255705344.00
[更新]:
损失函数 loss32
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits( …Run Code Online (Sandbox Code Playgroud) 我在 TensorFlow 上实现了全卷积网络。它使用编码器-解码器结构。训练时,我总是使用相同的图像大小(224x224,使用随机裁剪)并且一切正常。
在干扰阶段,我想一次预测一张图像,因为我想使用完整图像(未裁剪)。例如,这样的图像有 size [406,256]。这是问题。在 Encoder-Decoder 架构中,我添加了两个 tesors (z = x + y)。训练时,两个张量的大小匹配。在预测我的单个图像时,大小不匹配(张量大小:[1,47,47,64]vs [1,46,46,64])。我认为这是由 Conv 和 Pool 层中的一些舍入造成的。
我应该改变我的架构以适用于我想要的任何图像尺寸?我应该更改舍入参数吗?或者添加张量的“裁剪”?
架构实现链接:https : //gist.github.com/melgor/0e43cadf742fe3336148ab64dd63138f (问题出现在第166行)
tensorflow ×2