तो, मैं एक इमारत पर काम कर रहा हूँ एक पूरी तरह से convolutional नेटवर्क (FCN), Marvin Teichmann's tensorflow-fcnअर्थ विभाजन - नुकसान समारोह में ValueError (विरल-softmax)
मेरे इनपुट छवि डेटा के आधार पर, समय के लिए एक 750x750x3 आरजीबी छवि है। नेटवर्क के माध्यम से चलने के बाद, मैं अपनी हानि गणना के लिए आकार [बैच_साइज, 750,750,2] के लॉग का उपयोग करता हूं।
यह एक द्विआधारी वर्गीकरण है - मैं 2 वर्गों यहाँ है, [0, 1] मेरे लेबल में ([batch_sizex750x750] और इन नुकसान समारोह में जाते हैं, तो नीचे दिए गए आकार के:
def loss(logits, labels, num_classes):
with tf.name_scope('loss mine'):
logits = tf.to_float(tf.reshape(logits, [-1, num_classes]))
#CHANGE labels type to int, for sparse_softmax...
labels = tf.to_int64(tf.reshape(labels, [-1]))
print ('shape of logits: %s' % str(logits.get_shape()))
print ('shape of labels: %s' % str(labels.get_shape()))
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name='Cross_Entropy')
tf.add_to_collection('losses', cross_entropy)
loss = tf.add_n(tf.get_collection('losses'), name='total_loss')
return loss
ये हैं। देगी बाद logits और लेबल के लिए आकार:
shape of logits: (562500, 2)
shape of labels: (562500,)
और यहाँ, यह मुझे एक ValueError फेंकता कहा:
Shapes() and (562500,) are not compatible
नीचे पूर्ण ट्रेसबैक:
File "train.py", line 89, in <module>
loss_train = loss.loss(logits, data.train.labels, 2)
File "/tensorflow-fcn/loss.py", line 86, in loss
loss = tf.add_n(tf.get_collection('losses'), name='total_loss')
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py", line 88, in add_n
result = _op_def_lib.apply_op("AddN", inputs=inputs, name=name)
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 704, in apply_op
op_def=op_def)
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2262, in create_op
set_shapes_for_outputs(ret)
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1702, in set_shapes_for_outputs
shapes = shape_func(op)
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 1557, in _AddNShape
merged_shape = merged_shape.merge_with(input_.get_shape())
File "/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/tensor_shape.py", line 570, in merge_with
(self, other))
ValueError: Shapes() and (562500,) are not compatible
सुझाव? क्या tf.add_to_collection('losses', cross_entropy)
का मेरा कार्यान्वयन गलत है?
अद्यतन:
मैं, पिक्सल (या तो मुझे लगता है) भर में जोड़ने पर बिना इस भागने की कोशिश की सीधे उपरोक्त कोड में cross_entropy
लौटने, हानि के रूप में द्वारा।
ऐसा लगता है कि ऐसा लगता है। (अब यह प्रशिक्षण अनुकूलक समारोह से एक ValueError
फेंकता है, उन्होंने कहा:। No gradients provided for any variable
मान लिया जाये कि यह मेरा वजन प्रारंभ और किसी और चीज से नियमितीकरण के साथ क्या करना अधिक है
अद्यतन 2:।
ऊपर (के बारे में कारण ValueError ढ़ाल के अभाव) के लिए तुच्छ था। here उल्लेख किया है, इस संदेश को आम तौर पर का सामना करना पड़ा है जब वहाँ परिभाषित tf.Variable वस्तुओं और नुकसान टेन्सर कि कि कम से कम किया जा रहा है में से किसी के बीच कोई मार्ग है।
उपयोग के साथ प्रारंभिक समस्या tf.add_n
हालांकि जारी है। मैं इसे मान रहा हूं टेंसरफ्लो में ग्राफ़ संग्रह कैसे काम करते हैं, इस बारे में यांत्रिकी के साथ क्या करना है। मेरे चर को प्रारंभ करने के बाद, त्रुटि अब पढ़ती है:
Shapes() and (?,) are not compatible
हाय, मुरुशिव, क्या आप आकार के लॉग [batch_size, 750,750,2] को परिभाषित करने के तरीके पर अधिक साझा करना चाहते हैं? आपके द्वारा उल्लेख किए गए बैच आकार के – user288609
@ user288609 लॉग इन (यहां मेरी शब्दावली की अनिश्चितता), मैं मॉडल (बिल्ड विधि) से निकालता हूं। आप कुछ भी जानना चाहते हैं? – mshiv