Сохранение и восстановление для Denoising Network Tensorflow на основе CNN - PullRequest
0 голосов
/ 02 февраля 2019

Мой вопрос о восстановлении обученной модели Denoised.Моя сеть определена следующим образом.

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

tf.variable_scope (name) является тем жекак указано выше.

Теперь у меня есть потери , оптимизатор и точность , определенные с помощью tf.name_scope.

Когда япопытаться восстановить функцию убыток , она будет запрашивать даже метки (которых у меня нет).

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

Может кто-нибудь помочь мне понять, как это проверить?Какую операцию я должен восстановить?

Должен ли я вызывать все слои, проходить входные данные и проверять потери (MSE)?

Я проверил много примеров, но, похоже, все проблемы классификации и, наконец, определение 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)

1 Ответ

0 голосов
/ 04 февраля 2019

Попробуйте просмотреть график вашего кода на тензорной доске, получите имя операции с последнего слоя (в вашем случае deconv4).Нечто похожее на изображение ниже.Попробуйте загрузить тензор, используя следующий код:

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

Это должно работать, так как ваши слои взаимосвязаны.

Дайте мне знать, если это сработало!

Операционное изображение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...