テンソルフローのmy(loss)関数に2つのパラメータを渡しています。これは、異なるステップで変化するため、プレースホルダの形にする必要があります。私は訓練中にそれらを食べる。 私のプログラム概要は以下の通りです。 私の質問は、彼らが効果的にそれらを養う価値を取ることですか? 次のスニペットを見て、私が正しくやっていることを伝えたらどうでしょう? 私は途中で何かエラーや何かを得ることはありません。関数パラメータとしてテンソルフロープレースホルダを渡す
tetha1_placeholder, tetha2_placeholder = tf.placeholder(tf.float32, name='tetha1plh'), tf.placeholder(tf.float32, name='tetha2plh')
hyperparams = {'tetha1': tetha1_placeholder,'tetha2':tetha2_placeholder}
[getting embeddings1,embeddings2, embeddings3 from my model]
loss = loss_function (embeddings1,embeddings1,embeddings3, hyperparams)
with sess.as_default():
while true:
step = sess.run(global_step, feed_dict=None)
t1, t2 = calculate_params(step)
feed_dict = {tetha1_placeholder:t1, tetha2_placeholder:t2}
error=sess.run([loss], feed_dict=feed_dict)
def loss_function (embeddings1,embeddings2,embeddings3, hyperparams):
pos_dist =hyperparams['tetha1'] * tf.reduce_sum(tf.square(tf.subtract(embeddings1, embeddings2)), 1)
neg_dist = hyperparams['tetha2'] *tf.reduce_sum(tf.square(tf.subtract(embeddings1, embeddings3)), 1)
loss = tf.reduce_mean(tf.add(pos_dist,neg_dist))
return loss
ありがとう@mrry 私は最後の部分を取得しませんでした。 t1とt2は2つのスカラ浮動小数点数です。あなたは、shape =(1)としてtetha1_placeholderの形を明示的に指定する方が良いでしょうか? – Hamid
ああ、両方のスカラーであれば、それらを 'tetha1_placeholder = tf.placeholder(tf.float32、shape = []、name'tetha1plh ')'と定義することができます(他のプレースホルダーについても同様です)。これにより、正確な計算に応じて、パフォーマンスとエラーメッセージが少し改善されます。 – mrry