2016-07-23 7 views
5

तो, मैं एक इमारत पर काम कर रहा हूँ एक पूरी तरह से 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 
+0

हाय, मुरुशिव, क्या आप आकार के लॉग [batch_size, 750,750,2] को परिभाषित करने के तरीके पर अधिक साझा करना चाहते हैं? आपके द्वारा उल्लेख किए गए बैच आकार के – user288609

+0

@ user288609 लॉग इन (यहां मेरी शब्दावली की अनिश्चितता), मैं मॉडल (बिल्ड विधि) से निकालता हूं। आप कुछ भी जानना चाहते हैं? – mshiv

उत्तर

3

समापन। हानि समारोह में कोड को बदलना एक औसत सारांश याद कर रहा था। इस समस्या का सामना करने वाले किसी और के लिए, नीचे दिए गए नुकसान समारोह को संशोधित करें, और इसे ठीक काम करना चाहिए।

cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name='Cross_Entropy') 
    cross_entropy_mean = tf.reduce_mean(cross_entropy, name='xentropy_mean') 
    tf.add_to_collection('losses', cross_entropy_mean) 

    loss = tf.add_n(tf.get_collection('losses'), name='total_loss') 
return loss 
+1

आप अपना जवाब स्वीकार कर सकते हैं –

+0

@ ओलिवियरमोइंड्रोट, एक बार मुझे अनुमति मिलने के बाद, कर देगा। – mshiv

+0

हानि समारोह को लागू करते समय, परिणाम नैन है। इसके परिणामस्वरूप क्या कारण है? धन्यवाद – Lei

संबंधित मुद्दे