【发布时间】:2019-06-26 23:26:05
【问题描述】:
我的问题是关于恢复去噪训练模型。 我通过以下方式定义了我的网络。
Conv1->relu1->Conv2->relu2->Conv3->relu3->Deconv1
tf.variable_scope(name) 同上。
现在我用 tf.name_scope 定义了我的 loss、optimizer 和 accuracy。
当我尝试恢复 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