6

मैं Tensorflow "MNIST for Pros" CNN example से कोड का पुन: उपयोग करना चाहता हूं। मेरी छवियां केवल 38 आउटपुट कक्षाओं के साथ 388 पीएक्स एक्स 1 9 1 पीएक्स हैं। मूल कोड found here हो सकता है।एक पुन: प्रयोज्य Tensorflow संकल्पक नेटवर्क

इनपुट परत

x = tf.placeholder("float", shape=[None, 74108]) 

y_ = tf.placeholder("float", shape=[None, 2]) 

x_image = tf.reshape(x, [-1,388,191,1]) 

उत्पादन परत

W_fc2 = weight_variable([1024, 2]) 

b_fc2 = bias_variable([2]) 

संशोधित चल रहा है: मैं, जिन्हें आप नीचे इनपुट & उत्पादन परतों केवल बदलकर इस कोड का पुन: उपयोग करने की कोशिश की कोड एक अस्पष्ट stacktrace देता है:

W tensorflow/core/common_runtime/executor.cc:1027] 0x2136510 Compute status: Invalid argument: Input has 14005248 values, which isn't divisible by 3136 
    [[Node: Reshape_4 = Reshape[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](MaxPool_5, Reshape_4/shape)]] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1267, in run 
    _run_using_default_session(self, feed_dict, self.graph, session) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2763, in _run_using_default_session 
    session.run(operation, feed_dict) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 345, in run 
    results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 419, in _do_run 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: Input has 14005248 values, which isn't divisible by 3136 
    [[Node: Reshape_4 = Reshape[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](MaxPool_5, Reshape_4/shape)]] 
Caused by op u'Reshape_4', defined at: 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 554, in reshape 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 633, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1710, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 988, in __init__ 
    self._traceback = _extract_stack() 
+0

मुझे पाइथन 2.7.10, टेंसरफ्लो 0.5.0 का उपयोग उबंटू 14.10 पर आपके कोड को निष्पादित करने में कोई त्रुटि नहीं मिली। – agold

उत्तर

6
tensorflow.python.framework.errors.InvalidArgumentError: Input has 14005248 values, which isn't divisible by 3136 
[[Node: Reshape_4 = Reshape[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](MaxPool_5, Reshape_4/shape)]] 

लेकिन जिस तरह से आप यह आप वास्तविक रेखा से समस्या हो रही देखने से रोकता है निष्पादित। इसे एक फ़ाइल और पायथन <file> पर सहेजें।

File "<stdin>", line 1, in <module> 

लेकिन इस सवाल का जवाब है कि आप अपने convolutional और पूलिंग परतों का आकार नहीं बदला है है, इसलिए जब आप के माध्यम से 28x28 छवियों को चलाने के लिए प्रयोग किया जाता है, वे अंततः एक 7x7x (convolutional_depth) परत करने के लिए नीचे सिकुड़। अब आप के माध्यम से विशाल छवियों चला रहे हैं, इसलिए पहले convolutional परत और 2x2 maxpool के बाद, आप एक बहुत बड़ी बात यह है कि आप में खिलाने के लिए कोशिश कर रहे हैं मिल गया है, लेकिन आप को देगी रहे हैं:

h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) 
h_pool2 = max_pool_2x2(h_conv2) 

W_fc1 = weight_variable([7 * 7 * 64, 1024]) 
b_fc1 = bias_variable([1024]) 

आपकी बड़ी छवियों के साथ h_pool2 का आउटपुट बहुत बड़ा है। आपको उन्हें और अधिक संकुचित करने की आवश्यकता है - अधिक संकल्पक और अधिकतम चढ़ाई परतों के साथ। आप वहां मौजूद इनपुट आकार से मेल खाने के लिए W_fc1 के आकार को बढ़ाने का भी प्रयास कर सकते हैं। यह दो 2x2 maxpools के माध्यम से चल रहा है - प्रत्येक आकार x और y आयामों में 2 से छोटा करता है। 28x28x1 -> 14x14x32 -> 7x7x64। तो आपकी छवियां 388 x 1 9 1 से जा रही हैं -> 1 9 4 x 95 -> 9 7 x 47

चेतावनी के रूप में, 97 * 47 = 4559 इनपुट के साथ पूरी तरह से जुड़ा हुआ परत हिमनद रूप से धीमा होने जा रहा है।

+0

डीजीए: अंतर्दृष्टि के लिए धन्यवाद। आपके दृष्टिकोण की कोशिश करेंगे। – user2849678

+2

एक और समाधान यह महसूस करना है कि ["कोई पूरी तरह से जुड़े परतें नहीं हैं; केवल संकल्प" - यैन लीकुन] (https://www.facebook.com/yann.lecun/posts/10152820758292143)। एफसी परतों को संकल्प के साथ बदलें, और किसी भी छवि आयाम से ज्ञात आकार में कम करने के लिए "वैश्विक औसत पूलिंग" जैसे कुछ का उपयोग करें। – mdaoust

+0

@dga & mdaoust: बहुत धन्यवाद। मैंने डीजीए द्वारा सुझाए गए दृष्टिकोण की कोशिश की और यह काम किया। मैं अभी भी स्पष्टीकरण के लिए एक सरल 'Conv नेट के लिए Conv नेट' की तलाश में हूँ। उपर्युक्त स्पष्टीकरण से, मुझे लगता है कि 2x2 मैक्सपूल आकार 2 से घटा देता है। प्रत्येक अधिकतमपूल के साथ तीसरा आयाम दोगुना क्यों होता है। – user2849678

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