मेरा प्रश्न और समस्या कोड के दो ब्लॉक के नीचे बताई गई है।टेंसरफ्लो: इस हानि गणना को प्रदर्शित करना
घटाने समारोह
def loss(labels, logits, sequence_lengths, label_lengths, logit_lengths):
scores = []
for i in xrange(runner.batch_size):
sequence_length = sequence_lengths[i]
for j in xrange(length):
label_length = label_lengths[i, j]
logit_length = logit_lengths[i, j]
# get top k indices <==> argmax_k(labels[i, j, 0, :], label_length)
top_labels = np.argpartition(labels[i, j, 0, :], -label_length)[-label_length:]
top_logits = np.argpartition(logits[i, j, 0, :], -logit_length)[-logit_length:]
scores.append(edit_distance(top_labels, top_logits))
return np.mean(scores)
# Levenshtein distance
def edit_distance(s, t):
n = s.size
m = t.size
d = np.zeros((n+1, m+1))
d[:, 0] = np.arrange(n+1)
d[0, :] = np.arrange(n+1)
for j in xrange(1, m+1):
for i in xrange(1, n+1):
if s[i] == t[j]:
d[i, j] = d[i-1, j-1]
else:
d[i, j] = min(d[i-1, j] + 1,
d[i, j-1] + 1,
d[i-1, j-1] + 1)
return d[m, n]
में
मैं इतना है कि सब कुछ एक ही स्थान पर हो रहा है मेरी कोड समतल की कोशिश की है के लिए इस्तेमाल किया जा रहा है। अगर भ्रम के टाइप/अंक हैं तो मुझे बताएं।
File "runner.py", line 63, in <module>
train_op = optimizer.minimize(loss_placeholder, global_step=global_step)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 188, in minimize
name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 277, in apply_gradients
(grads_and_vars,))
ValueError: No gradients provided for any variable: <all my variables>
तो मैं इस TensorFlow शिकायत कर रहा है कि यह है कि यह की ढ़ाल गणना नहीं कर सकते हैं मान:
sequence_lengths_placeholder = tf.placeholder(tf.int64, shape=(batch_size))
labels_placeholder = tf.placeholder(tf.float32, shape=(batch_size, max_feature_length, label_size))
label_lengths_placeholder = tf.placeholder(tf.int64, shape=(batch_size, max_feature_length))
loss_placeholder = tf.placeholder(tf.float32, shape=(1))
logit_W = tf.Variable(tf.zeros([lstm_units, label_size]))
logit_b = tf.Variable(tf.zeros([label_size]))
length_W = tf.Variable(tf.zeros([lstm_units, max_length]))
length_b = tf.Variable(tf.zeros([max_length]))
lstm = rnn_cell.BasicLSTMCell(lstm_units)
stacked_lstm = rnn_cell.MultiRNNCell([lstm] * layer_count)
rnn_out, state = rnn.rnn(stacked_lstm, features, dtype=tf.float32, sequence_length=sequence_lengths_placeholder)
logits = tf.concat(1, [tf.reshape(tf.matmul(t, logit_W) + logit_b, [batch_size, 1, 2, label_size]) for t in rnn_out])
logit_lengths = tf.concat(1, [tf.reshape(tf.matmul(t, length_W) + length_b, [batch_size, 1, max_length]) for t in rnn_out])
optimizer = tf.train.AdamOptimizer(learning_rate)
global_step = tf.Variable(0, name='global_step', trainable=False)
train_op = optimizer.minimize(loss_placeholder, global_step=global_step)
...
...
# Inside training loop
np_labels, np_logits, sequence_lengths, label_lengths, logit_lengths = sess.run([labels_placeholder, logits, sequence_lengths_placeholder, label_lengths_placeholder, logit_lengths], feed_dict=feed_dict)
loss = loss(np_labels, np_logits, sequence_lengths, label_lengths, logit_lengths)
_ = sess.run([train_op], feed_dict={loss_placeholder: loss})
मेरी समस्या
मुद्दा यह है कि इस त्रुटि लौट रहा है मेरा नुकसान क्योंकि नुकसान टीएफ के दायरे के बाहर, numpy द्वारा किया जाता है।
तो स्वाभाविक रूप से इसे ठीक करने के लिए मैं इसे टेंसरफ्लो में कोशिश और कार्यान्वित करता हूं। मुद्दा यह है कि, मेरे logit_lengths
और label_lengths
दोनों टेंसर हैं, इसलिए जब मैं एक तत्व को आज़माता हूं और एक्सेस करता हूं, तो मुझे आकार का एक टेंसर लौटाया जाता है []। यह एक मुद्दा है जब मैं tf.nn.top_k()
का उपयोग करने का प्रयास कर रहा हूं जो k
पैरामीटर के लिए Int
लेता है।
एक और मुद्दा यह मेरी label_lengths
एक प्लेसहोल्डर है और के बाद से मेरी loss
मूल्य optimizer.minimize(loss)
कॉल करने से पहले से परिभाषित करने की जरूरत है, मैं भी एक त्रुटि है कि कहते हैं एक मूल्य प्लेसहोल्डर के लिए पारित किए जाने की आवश्यकता हो रही है।
मैं बस सोच रहा हूं कि मैं इस हानि समारोह को कैसे आजमा सकता हूं और कार्यान्वित कर सकता हूं। या अगर मुझे कुछ याद आ रही है।
संपादित करें: कुछ further reading के बाद मुझे लगता है कि आम तौर पर एक मैं सत्यापन में और एक किराए घटाने कि एक ही स्थान पर कम से कम के रूप में सच नुकसान प्रयोग किया जाता है के प्रशिक्षण में उपयोग किया जाता है का वर्णन की तरह नुकसान। क्या किसी को पता है कि मेरे जैसे संपादन दूरी आधारित परिदृश्य के लिए सरोगेट हानि का उपयोग किस प्रकार किया जाता है?
'np_labels, np_logits, sequence_lengths, label_lengths, logit_lengths = sess.run में ([labels_placeholder, logits, sequence_lengths_placeholder, label_lengths_placeholder, logit_lengths], feed_dict = feed_dict) ' क्या आपके 'feed_dict' है? Session.run के लिए आपके पास फ़ेचर्स सूची में प्लेसहोल्डर नहीं होना चाहिए। –
@TheMyth Feed_dict वास्तव में प्लेसहोल्डर मानों को संग्रहीत करता है। यह निश्चित रूप से एक अनावश्यकता है, लेकिन मुझे लगता है कि मैंने कोड को एसओ के लिए अधिक संक्षिप्त बनाने के लिए किया था। –