2017-03-01 94 views
1

我想bulid在tensorflow的圖形,但遇到了以下錯誤:ValueError異常:張量必須來自同一個圖作爲張量

ValueError: Tensor(transformation_0/output/output: 0", shape=(), dtype=float32) must be from the same graph as Tensor("variables/total_output: 0", shape=(), dtype=float32_ref)

下面是代碼:

import tensorflow as tf 
# Explicitly create a Graph object 
graph =tf.Graph() 
with graph.as_default(): 

    with tf.name_scope("variables"): 
    # Variable to keep track of how many times the graph has been run 
    global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step") 

    # Variable that keeps track of the sum of all output values over time: 
    total_output = tf.Variable(0.0, dtype=tf.float32, trainable=False, name="total_output") 

    # Primary transformation Operations 
    with tf.name_scope("transformation"): 

     # Separate input layer 
     with tf.name_scope("input"): 
     # Create input placeholder- takes in a Vector 
     a = tf.placeholder(tf.float32, shape=[None],name="input_placeholder_a") 

     # Separate middle layer 
     with tf.name_scope("intermediate_layer"): 
     b = tf.reduce_prod(a, name="product_b") 
     c = tf.reduce_sum(a, name="sum_c") 

     # Separate output layer 
     with tf.name_scope("output"): 
     output = tf.add(b, c, name="output") 

    with tf.name_scope("update"): 
     # Increments the total_output Variable by the latest output 
    update_total = total_output.assign_add(output) 

     # Increments the above `global_step` Variable, should be run whenever  #the graph is run 
    increment_step = global_step.assign_add(1) 

# Summary Operations 
with tf.name_scope("summaries"): 
    avg = tf.div(update_total, tf.cast(increment_step, tf.float32), name="average") 

    # Creates summaries for output node 
    tf.scalar_summary(b'Output', output, name="output_summary") 
    tf.scalar_summary(b'Sum of outputs over time', update_total, name="total_summary") 
    tf.scalar_summary(b'Average of outputs over time', avg, name="average_summary") 

# Global Variables and Operations 
with tf.name_scope("global_ops"): 
    # Initialization Op 
init = tf.initialize_all_variables() 
    # Merge all summaries into one Operation 
    merged_summaries = tf.merge_all_summaries() 

# Start a Session, using the explicitly created Graph 
sess = tf.Session(graph=graph) 

# Open a SummaryWriter to save summaries 
writer = tf.train.SummaryWriter('./improved_graph', graph) 

# Initialize Variables 
sess.run(init) 


def run_graph(input_tensor): 
""" 
Helper function; runs the graph with given input tensor and saves summaries 
""" 
feed_dict = {a: input_tensor} 
_, step, summary = sess.run([output, increment_step, merged_summaries], 
           feed_dict=feed_dict) 
writer.add_summary(summary, global_step=step) 
# Run the graph with various inputs 
run_graph([2,8]) 
run_graph([3,1,3,3]) 
run_graph([8]) 
run_graph([1,2,3]) 
run_graph([11,4]) 
run_graph([4,1]) 
run_graph([7,3,1]) 
run_graph([6,3]) 
run_graph([0,2]) 
run_graph([4,5,6]) 

# Write the summaries to disk 
writer.flush() 

# Close the SummaryWriter 
writer.close() 

# Close the session 
sess.close() 

回答

0

有你試過:

1)改變

graph =tf.Graph() 
with graph.as_default() 

爲:

with tf.Session() as sess: 

2)和卸下:

sess = tf.Session(graph=graph) 

我有同樣的錯誤,並且這些更改解決它。

0

嘗試此,刪除形狀= [無]

a = tf.placeholder(tf.float32, name="input_placeholder_a") 
相關問題