【问题标题】:Save and restore for a CNN based Denoising Network Tensorflow保存和恢复基于 CNN 的去噪网络 Tensorflow
【发布时间】:2019-06-26 23:26:05
【问题描述】:

我的问题是关于恢复去噪训练模型。 我通过以下方式定义了我的网络。

Conv1->relu1->Conv2->relu2->Conv3->relu3->Deconv1

tf.variable_scope(name) 同上。

现在我用 tf.name_scope 定义了我的 lossoptimizeraccuracy

当我尝试恢复 loss 功能时,它甚至会询问 labels(我没有)。

feed_dict={x:input, y:labels}
sess.run('loss',feed_dict)

谁能帮我理解如何测试这个?我应该恢复哪个操作?

我应该调用所有层,传递输入并检查损失(MSE)吗?

我检查了很多例子,但似乎都是分类问题,最后用 logits 定义了 softmax。

编辑: 下面是我的代码,现在很容易看到 tf.name_scope 和 tf.variable_scope 是如何定义的。我觉得我可能必须带上整个图层来测试新图像。对吗?

def new_conv_layer(input, num_input_channels, filter_size, num_filters, name):

with tf.variable_scope(name):
    # Shape of the filter-weights for the convolution
shape = [filter_size, filter_size, num_input_channels, num_filters]


    # Create new weights (filters) with the given shape
    weights = tf.Variable(tf.truncated_normal([filter_size, filter_size, num_input_channels, num_filters], stddev=0.5))


    # Create new biases, one for each filter
    biases = tf.Variable(tf.constant(0.05, shape=[num_filters]))

    filters = tf.Variable(tf.truncated_normal([filter_size, filter_size, num_input_channels, num_filters], stddev=0.5))


    # TensorFlow operation for convolution
    layer = tf.nn.conv2d(input=input, filter=filters, strides=[1,1,1,1], padding='SAME')

    # Add the biases to the results of the convolution.
    layer += biases

    return layer, weights

def new_relu_layer(input, name):

 with tf.variable_scope(name):
    #TensorFlow operation for convolution
    layer = tf.nn.relu(input)

    return layer
def new_pool_layer(input, name):

 with tf.variable_scope(name):


    # TensorFlow operation for convolution
    layer = tf.nn.max_pool(value=input, ksize=[1, 1, 1, 1], strides=[1, 1, 1, 1], padding='SAME')
    return layer 

def new_layer(inputs, filters,kernel_size,strides,padding, name):

 with tf.variable_scope(name):

    layer = tf.layers.conv2d_transpose(inputs=inputs, filters=filters , kernel_size=kernel_size, strides=strides, padding=padding,   data_format =  'channels_last')

    return layer







layer_conv1, weights_conv1 = new_conv_layer(input=yTraininginput, num_input_channels=1, filter_size=5, num_filters=32, name ="conv1")
layer_relu1 = new_relu_layer(layer_conv1, name="relu1")

layer_conv2, weights_conv2 = new_conv_layer(input=layer_relu1, num_input_channels=32, filter_size=5, num_filters=64, name ="conv2")
layer_relu2 = new_relu_layer(layer_conv2, name="relu2")


layer_conv3, weights_conv3 = new_conv_layer(input=layer_relu2, num_input_channels=64, filter_size=5, num_filters=128, name ="conv3")
layer_relu3 = new_relu_layer(layer_conv3, name="relu3")


layer_deconv1 = new_layer(inputs=layer_relu3, filters=1,  kernel_size=[5,5] ,strides=[1,1] ,padding='same',name = 'deconv1')
layer_relu4 = new_relu_layer(layer_deconv1, name="relu4")


layer_conv4, weights_conv4 = new_conv_layer(input=layer_relu4, num_input_channels=1, filter_size=5, num_filters=128, name ="conv4")
layer_relu5 = new_relu_layer(layer_conv4, name="relu5")


layer_deconv2 = new_layer(inputs=layer_relu5, filters=1,  kernel_size=[5,5] ,strides=[1,1] ,padding='same',name = 'deconv2')
layer_relu6 = new_relu_layer(layer_deconv2, name="relu6")





# Use Cross entropy cost function
with tf.name_scope("loss"):
    cross_entropy = tf.losses.mean_squared_error(labels = xTraininglabel,predictions = layer_relu6)


# Use Adam Optimizer
with tf.name_scope("optimizer"):
    optimizer = tf.train.AdamOptimizer(learning_rate=1e-6).minimize(loss = cross_entropy)


# Accuracy
with tf.name_scope("accuracy"):
    accuracy = tf.image.psnr(a=layer_relu6,b=xTraininglabel,max_val=1.0)

【问题讨论】:

  • 嘿克里希!您能否为您的问题提供更多背景信息以帮助人们更好地回答您的问题?谢谢!
  • 是的。我会做的
  • 在这种情况下,“标签”是您希望降噪器输出的真实图像,即代码中的 xTrainingLabel。如果您因为希望网络输出其输入而没有标签,则输入应该是“标签”。对我来说这个问题有点不清楚。
  • 我有一个嘈杂的图像(输入)来测试训练有素的模型。在训练过程中使用标签。现在由于数据问题,我只有(新)输入,没有相应的标签。这是监督学习
  • 我应该真正恢复什么来测试我的模型? >Loss layer (MSE) 给出一个数不能使用 >Accuracy(PSNR)? >优化器? >最后一层relu?我对这些事情感到困惑

标签: python tensorflow conv-neural-network


【解决方案1】:

尝试在 tensorboard 上查看您的代码图,从最后一层获取操作名称(在您的情况下为 deconv4)。如下图所示。 尝试使用以下代码加载张量:

operation = graph.get_tensor_by_name("<operationname:0>")

这应该可以工作,因为您的层是相互关联的。

让我知道这是否有效!

Operation Image

【讨论】:

  • 这可行,但如果我做以下事情,我将如何确定它是否通过所有层?因为我的最后和第一个维度是相同的
  • 通过检查训练网络的准确性?还是建个小网络检查一下?
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 2017-11-06
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多