Tensorflow在变量重用方面给出了奇怪的错误,说明内核已经存在

时间:2018-04-05 18:40:34

标签: tensorflow

好消息我想出了这个,并将为后代保留解决方案。

我需要用tf.restore_default_graph()开始我的脚本

我正处于在Tensorflow中编写GAN的开始阶段,关于我是否打算重用变量,我收到了一个奇怪的错误消息。它基本上是在说(我认为)我试图为我的一个卷积定义一次内核。附带代码和错误。谢谢!

import tensorflow as tf
import numpy as np
import os
from definitions import *

"""
HYPERPARAMETERS
"""
BATCH_SIZE = 10    #number of slices in the batches fed to Discrim
NUM_STEPS  = 100  #number of iterations before we save 
GEN_LR     = 1e-5
DIS_LR     = 1e-5
EPS        = 1e-10
KERNEL     = 3

x=tf.placeholder(tf.float32,shape=[BATCH_SIZE,256,256,1],name='GenInput')
y=tf.placeholder(tf.float32,shape=[BATCH_SIZE,256,256,1],name='GenOutput')
#label=tf.placeholder(tf.int32, name='IsReal') #1=real 0=generated

#whole_dataset=Dataset2D('/Users/Karl/Inputs/training set/DEC-MRI_training','/Users/Karl/Inputs/training set/ROI_Liu_modified/')


def gen(x):
    with tf.variable_scope('GenBlk1'):
        with tf.variable_scope('conv1'):
            conv1=tf.layers.conv2d(x, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")
            conv1=tf.nn.relu(conv1)
        with tf.variable_scope('conv2'):
            conv2=tf.layers.conv2d(conv1, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")
            conv2=tf.nn.relu(conv2)
        with tf.variable_scope('conv3'):
            conv3=tf.layers.conv2d(conv2, 5, (KERNEL, KERNEL), strides=(1, 1), padding="same")
            conv3=tf.nn.relu(conv3)
        #xp=tf.layers.max_pooling2d(inputs, pool_size,strides,padding='valid')
    return conv3

def discriminator(y):
    with tf.variable_scope('DisBlk1'):
        y=tf.layers.conv2d(y, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")
        y=tf.nn.relu(y)
        y=tf.layers.conv2d(y, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")
        y=tf.nn.relu(y)
        y=tf.layers.conv2d(y, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")
        y=tf.nn.relu(y)
        y=tf.layers.dense(y,2)
        #xp=tf.layers.max_pooling2d(inputs, pool_size,strides,padding='valid')
    return y

def main(x,whole_dataset):
    #ops
    pred = gen(x)
    discrim_fake = discriminator(predict)
    #discrim_real = discriminator(y)
    #gLoss=  = 


    #summaries
    with tf.name_scope("generator_output"):
        tf.summary.image("outputs", pred)

    tf.summary.scalar("discriminator_loss", dLoss)
    tf.summary.scalar("generator_loss_GAN", gLoss)

    for var in tf.trainable_variables():
        tf.summary.histogram(var.op.name + "/values", var)

    saver = tf.train.Saver(max_to_keep=10)

    GLOBAL_STEP=0
    #with tf.Session() as sess:
    #    while True: #main loop

main(x,whole_dataset)

这是错误:

runfile('/Users/Karl/Research/NNStuff/GAN_breast/main.py', wdir='/Users/Karl/Research/NNStuff/GAN_breast')
Reloaded modules: definitions
Traceback (most recent call last):

  File "<ipython-input-74-b7a187cb0f1a>", line 1, in <module>
    runfile('/Users/Karl/Research/NNStuff/GAN_breast/main.py', wdir='/Users/Karl/Research/NNStuff/GAN_breast')

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 77, in <module>
    main(x,whole_dataset)

  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 63, in main
    tf.summary.image("outputs", gen(x))

  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 31, in gen
    conv1=tf.layers.conv2d(x, 32, (KERNEL, KERNEL), strides=(1, 1), padding="same")

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/layers/convolutional.py", line 551, in conv2d
    return layer.apply(inputs)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 503, in apply
    return self.__call__(inputs, *args, **kwargs)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 443, in __call__
    self.build(input_shapes[0])

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/layers/convolutional.py", line 137, in build
    dtype=self.dtype)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/layers/base.py", line 383, in add_variable
    trainable=trainable and self.trainable)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 1065, in get_variable
    use_resource=use_resource, custom_getter=custom_getter)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 962, in get_variable
    use_resource=use_resource, custom_getter=custom_getter)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 367, in get_variable
    validate_shape=validate_shape, use_resource=use_resource)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 352, in _true_getter
    use_resource=use_resource)

  File "/Users/Karl/anaconda/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 664, in _get_single_variable
    name, "".join(traceback.format_list(tb))))

ValueError: Variable GenBlk1/conv1/conv2d/kernel already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 30, in generator
    with tf.variable_scope('conv1'):
  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 55, in main
    #ops
  File "/Users/Karl/Research/NNStuff/GAN_breast/main.py", line 77, in <module>
    main(x,whole_dataset)

0 个答案:

没有答案