मैं Tensorflow 1.x में लिखे कोड को Tensorflow 2.1.0 में कोड में अपडेट करने का प्रयास कर रहा हूँ। मैं Tensorflow 2.1.0 प्रलेखन का उपयोग करके कोड परिवर्तित कर रहा हूं, और मुझे इस कोड तक कोई समस्या नहीं थी।

loss = tf.losses.softmax_cross_entropy(one_hot_labels, logits)

उपरोक्त कोड Tensorflow 1.x संस्करण है, और मुझे लगता है, Tensorflow 2.1.0 प्रलेखन के अनुसार, ठीक से अद्यतन कोड है

loss = tf.nn.softmax_cross_entropy_with_logits(one_hot_labels, logits)

फिर, जब मैं दौड़ता हूँ

return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)

मुझे निम्नलिखित त्रुटि मिलती है।

Loss must be scalar, given: Tensor("softmax_cross_entropy_with_logits/Reshape_2:0", shape=(512,), dtype=float32)**

तो, मैं Tensorflow 1.x संस्करण में अनुमान लगा रहा हूँ, नुकसान tf.estimator.EstimatorSpec को 'टेंसर' के रूप में पारित किया गया था, लेकिन Tensorflow 2.1.0 में, नुकसान को scalar से tf.estimator.EstimatorSpec? Tensorflow 1.x और 2.1.0 दोनों में हानि (जिस तरह से इसे यहाँ परिभाषित किया गया है) टेंसर है यदि मैं इसे सही ढंग से याद करूँ।

तो, क्या कोई जानता है कि टेंसर को स्केलर में कैसे परिवर्तित किया जाए (जो मुझे नहीं लगता कि सीएनएन मॉडल के निर्माण में पर्याप्त या कुशल होगा) या बेहतर अभी तक, इस दुविधा को कैसे हल किया जाए?

या मैंने मूल कोड को गलत तरीके से बदल दिया?

मैं बहुत आभारी रहूंगा यदि compat.v1. का उपयोग तब तक नहीं किया जाता जब तक कि बिल्कुल आवश्यक न हो (यानी Tensorflow 2.1.0 में compat.v1 की तुलना में कोड का उपयोग करने का कोई अन्य तरीका नहीं है।)

1
beginnercoder 13 मई 2020, 09:30

1 उत्तर

सबसे बढ़िया उत्तर

आप केवल परिणाम को औसत कर सकते हैं (जो tf.losses.softmax_cross_entropy ने वैसे भी tf.losses.compute_weighted_loss के माध्यम से किया है):

loss = tf.math.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(one_hot_labels, logits))
3
jdehesa 13 मई 2020, 12:56