title: TensorFlow: How to ensure Tensors are in the same graph
body: <p>I'm trying to get started with TensorFlow in python, building a simple feed-forward NN. I have one class that holds the network weights (variables that are updated during train, and are supposed to remain constant for runtime) and another script to train the network, which gets the training data, separates them to batches and trains the network in batches. 
  When I try to train the network, I get an error indicating that the data tensor is not in the same graph as the NN tensors:</p>
  
  <blockquote>
    <p>ValueError: Tensor("Placeholder:0", shape=(10, 5), dtype=float32) must be from the same graph as Tensor("windows/embedding/Cast:0", shape=(100232, 50), dtype=float32).</p>
  </blockquote>
  
  <p>The relevant parts in the training script are:</p>
  
  <pre><code>def placeholder_inputs(batch_size, ner):
    windows_placeholder = tf.placeholder(tf.float32, shape=(batch_size, ner.windowsize))
    labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
    return windows_placeholder, labels_placeholder
  
  with tf.Session() as sess:
    windows_placeholder, labels_placeholder = placeholder_inputs(batch_size, ner)
    logits = ner.inference(windows_placeholder)
  </code></pre>
  
  
  
  <p>And the relevant in the network class are:</p>
  
  <pre><code>class WindowNER(object):
  def __init__(self, wv, windowsize=3, dims=[None, 100,5], reg=0.01):
      self.reg=reg
      self.windowsize=windowsize
      self.vocab_size = wv.shape[0]
      self.embedding_dim = wv.shape[1]
      with tf.name_scope("embedding"):
          self.L = tf.cast(tf.Variable(wv, trainable=True, name="L"), tf.float32)
      with tf.name_scope('hidden1'):
          self.W = tf.Variable(tf.truncated_normal([windowsize * self.embedding_dim, dims[1]],
              stddev=1.0 / math.sqrt(float(windowsize*self.embedding_dim))),
          name='weights')
          self.b1 = tf.Variable(tf.zeros([dims[1]]), name='biases')
      with tf.name_scope('output'):
          self.U = tf.Variable(tf.truncated_normal([dims[1], dims[2]], stddev = 1.0 / math.sqrt(float(dims[1]))), name='weights')
          self.b2 = tf.Variable(tf.zeros(dims[2], name='biases'))
  
  
  def inference(self, windows):
      with tf.name_scope("embedding"):
          embedded_words = tf.reshape(tf.nn.embedding_lookup(self.L, windows), [windows.get_shape()[0], self.windowsize * self.embedding_dim])
      with tf.name_scope("hidden1"):
          h = tf.nn.tanh(tf.matmul(embedded_words, self.W) + self.b1)
      with tf.name_scope('output'):
          t = tf.matmul(h, self.U) + self.b2
  </code></pre>
  
  <p>Why are there two graphs in the first place, and how can I ensure that data placeholder tensors are in the same graph as the NN?</p>
  
  <p>Thanks!!</p>