为什么tensorflow没有初始化变量?

时间:2018-02-11 07:41:42

标签: python-3.x tensorflow initialization

在使用Session声明tf.Session()时,我宣布tf.global_variables_initializertf.local_variables_initializer两个函数,不幸的是,继续收到详细说明"Uninitialized value Variable_1.使用的错误消息1}}“为什么?

我做了一些搜索并找到了StackExchange Question,但答案对我的情况没有帮助。所以我查看了TensorFlow API,发现了一个应该返回任何未初始化变量的操作tf.report_uninitialized_variables()。我打印结果并收到一对空方括号,考虑到我的错误消息的描述,这没有任何意义。发生什么了?我已经把眼睛拉了一天了。任何帮助表示赞赏。

import tensorflow as tf
import os
from tqdm import tqdm

#hyperparam
training_iterations = 100
PATH = "C:\\Users\\ratno\\Desktop\\honest chaos\\skin cam\\drive-download-20180205T055458Z-001"

#==================================import training_data=================================
def import_data(image_path):
    image_contents = tf.read_file(filename=image_path)
    modified_image = tf.image.decode_jpeg(contents=image_contents, channels=1)
    image_tensor = tf.cast(tf.reshape(modified_image, [1, 10000]), dtype=tf.float32)
    return image_tensor

#========================neural network================================
def neural_network(input_layer):

    Weight_net_1 = {'weights': tf.Variable(tf.random_normal(shape=(10000, 16))),
                'bias': tf.Variable(tf.random_normal(shape=(1, 1)))}
    Weight_net_2 = {'weights': tf.Variable(tf.random_normal(shape=(16, 16))),
                'bias': tf.Variable(tf.random_normal(shape=(1, 1)))}
    Weight_net_3 = {'weights': tf.Variable(tf.random_normal(shape=(16, 16))),
                'bias': tf.Variable(tf.random_normal(shape=(1, 1)))}
    Weight_net_4 = {'weights': tf.Variable(tf.random_normal(shape=(16, 1))),
                'bias': tf.Variable(tf.random_normal(shape=(1, 1)))}
    #Input Layer
    hypothesis = input_layer; x = hypothesis

    #Hidden Layer 1
    hypothesis = tf.nn.relu(tf.matmul(x, Weight_net_1['weights']) + Weight_net_1['bias']); x = hypothesis

    #Hidden Layer 2
    hypothesis = tf.nn.relu(tf.matmul(x, Weight_net_2['weights']) +     Weight_net_2['bias']); x = hypothesis

    #Hidden Layer 3
    hypothesis = tf.nn.relu(tf.matmul(x, Weight_net_3['weights']) + Weight_net_3['bias']); x = hypothesis

    # output cell
    hypothesis = tf.nn.relu(tf.matmul(x, Weight_net_4['weights']) + Weight_net_4['bias'])

    return hypothesis

#============================training the network=========================
def train(hypothesis):
    LOSS = tf.reduce_sum(1 - hypothesis)
    tf.train.AdamOptimizer(0.01).minimize(LOSS)

#Session==================================================================

with tf.Session() as sess:

    sess.run(tf.global_variables_initializer())
    sess.run(tf.local_variables_initializer())

    image_list = [os.path.join(PATH, file_name) for file_name in os.listdir(PATH)]

    for iteration in tqdm(range(training_iterations), desc="COMPLETION", ncols=80):
        for i in image_list:
            modified_image_tensor = sess.run(import_data(image_path=i))
            hypo = sess.run(neural_network(input_layer=modified_image_tensor))
            sess.run(train(hypothesis=hypo))

    print("\n\nTraining completed.\nRunning test prediction.\n")
    DIRECTORY = input("Directory: ")
    test_input = sess.run(import_data(DIRECTORY))
    prediction = sess.run(neural_network(input_layer=test_input))
    print(prediction)

    if prediction >= 0.5:
        print ("Acne")
    else:
        print ("What")

至于错误信息:

Caused by op 'Variable/read', defined at:
  File "C:/Users/ratno/Desktop/honest chaos/Hotdog/HDogntoHDog.py", line 75, in <module>
    hypo = sess.run(neural_network(input_layer=modified_image_tensor))
  File "C:/Users/ratno/Desktop/honest chaos/Hotdog/HDogntoHDog.py", line 23, in neural_network
    Weight_net_1 = {'weights': tf.Variable(tf.random_normal(shape=(10000, 16))),
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\variables.py", line 199, in __init__
expected_shape=expected_shape)
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\variables.py", line 330, in _init_from_args
self._snapshot = array_ops.identity(self._variable, name="read")
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\ops\gen_array_ops.py", line 1400, in identity
    result = _op_def_lib.apply_op("Identity", input=input, name=name)
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\op_def_library.py", line 767, in apply_op
op_def=op_def)
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 2630, in create_op
original_op=self._default_original_op, op_def=op_def)
  File "C:\Users\ratno\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py", line 1204, in __init__
self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable
     [[Node: Variable/read = Identity[T=DT_FLOAT, _class=["loc:@Variable"], _device="/job:localhost/replica:0/task:0/cpu:0"](Variable)]]

1 个答案:

答案 0 :(得分:1)

让我们从with tf.Session() as sess:开始查看您的主要功能。这将是您运行程序时执行的第一行。接下来发生的事情是你正在调用variables_initializer - 但是,你还没有声明任何变量!这是因为您没有调用def编辑的任何其他功能。所以这就是为什么当你在neural_network调用中调用sess.run时,它会在调用neural_network时创建(未初始化的)变量,然后尝试使用它们sess.run。显然这不起作用,因为你没有初始化这些新创建的变量。

在调用初始化程序之前,您必须在计算图中创建网络和所有必需的变量。你可以尝试这些方面:

data = import_data(image_path)
out = neural_network(data)
tr = train(hypothesis=out)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

顺便说一句,你的函数train也没有返回值,所以它不太可能像你期望的那样工作。请重新阅读tensorflow教程,了解如何操作优化器。