私はPythonでTensorFlowを使い始め、単純なフィードフォワードNNを構築しようとしています。私はネットワークの重み(列車の間に更新され、実行時間のために一定のままである変数)とネットワークを訓練するための別のスクリプトを持っています。訓練データを取得し、それらをバッチに分け、ネットワークをバッチで訓練します。 私はネットワークを訓練しようとすると、私はデータテンソルはNNテンソルと同じグラフにないことを示すエラーが表示されます。TensorFlow:テンソルが同じグラフ内にあることを確認する方法
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).
トレーニングスクリプト内の関連する部分は、以下のとおりです。
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)
やネットワーククラスの関連は、次のとおりです。
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
は、なぜ最初の場所で2つのグラフがあり、データプレースホルダのテンソルがNNと同じグラフ内にあることを確認するにはどうすればよいですか?
ありがとうございます!
ありがとうございました!しかし、私はこの変更を行いました(セッションをコメントアウトしてグラフが正しく構築されるまで)。そして、私はまだ同じエラーが出ます - 「Tensor(...)はTensor(...)と同じグラフでなければなりません。 – user616254
完全なコードを見ることができなければ、言うことは難しいです。しかし、 'g.as_default()'スコープの外側で演算子を構築しているコードがあるか、呼び出しているコードの一部が独自のグラフを構築している可能性があります。もっとコードを表示できますか? (正直言って、私が試すつもりなのは、演算子を構成し、各演算子が追加されているグラフのIDを表示するTensorflow Pythonコードをインストルメントすることです)。 –