2017-04-08 2 views
0

tensorflow의 두 가지 매개 변수를 다른 단계에서 변경되기 때문에 자리 표시 자 형태로 사용해야하는 tensorflow의 두 가지 매개 변수를 전달합니다. 나는 훈련 중에 그들을 먹인다. 프로그램 개요는 다음과 같습니다. 제 질문은 제가 효과적으로 먹는 가치관을 가지고 있습니까? 다음 스 니펫을보고 내가 올바르게하고 있다고 말할 수 있다면 고맙겠습니다. 그런데 오류가 발생하지 않습니다.tensorflow 자리 표시자를 함수 매개 변수로 전달

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 

답변

1

프로그램이 올바르게 표시됩니다. sess.run([loss], feed_dict=feed_dict)을 호출하면 의 loss_function()t1 값을 가지며 hyperparams['tetha2']loss_function() 값은 t2입니다. t1 항상 같은 형상을 갖는 경우 (t2tetha2_placeholder에 대한 유사과) tetha1_placeholder에 대한 tf.placeholder()를 구성 할 때 옆으로

는, 그 모양을 전달 권하고 싶습니다.

+0

감사합니다. @mrry 마지막 부분을 얻지 못했습니다. t1과 t2는 단지 두 개의 스칼라 부동 소수점 숫자입니다. tetha1_placeholder의 모양을 명시 적으로 shape = (1)로 지정하면 더 좋을 것입니다. – Hamid

+0

아, 둘 다 스칼라 인 경우 'tetha1_placeholder = tf.placeholder (tf.float32, shape = [], name'tetha1plh ')'로 정의 할 수 있습니다 (다른 자리 표시 자와 마찬가지로). 정확한 계산에 따라 약간 더 나은 성능 및 오류 메시지를 줄 수 있습니다. – mrry

관련 문제