2017-04-18 127 views
3

我對Tensorflow完全陌生。我一直在嘗試重新編寫Deep MNIST教程來預測MovieLens數據集上的電影收視率。我略微簡化了模型,以便不使用5分制,而是簡單的二進制Y/N分級(類似於Netflix上的最新評級體系)。我試圖僅使用部分評分來預測新項目的偏好。當訓練模型,我得到的堆棧跟蹤以下錯誤:使用SoftmaxCrossEntropyWithLogits登錄和標籤必須具有相同的大小錯誤

Traceback (most recent call last): 
    File "/Users/Eric/dev/Coding Academy >Tutorials/tf_impl/deep_tf_group_rec_SO.py", line 223, in <module> 
    train_step.run(feed_dict={x: batch_xs, y_: batch_ys, keep_prob: 0.5}) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/framework/ops.py", line 1550, in run 
    _run_using_default_session(self, feed_dict, self.graph, session) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/framework/ops.py", line 3764, in >_run_using_default_session 
    session.run(operation, feed_dict) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/client/session.py", line 767, in run 
    run_metadata_ptr) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/client/session.py", line 965, in _run 
    feed_dict_string, options, run_metadata) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/client/session.py", line 1015, in _do_run 
    target_list, options, run_metadata) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/client/session.py", line 1035, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: logits and >labels must be same size: logits_size=[1,2] labels_size=[50,2] 
    [[Node: SoftmaxCrossEntropyWithLogits = >SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, >_device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_2, Reshape_3)]] 

Caused by op u'SoftmaxCrossEntropyWithLogits', defined at: 
    File "/Users/Eric/dev/Coding Academy >Tutorials/tf_impl/deep_tf_group_rec_SO.py", line 209, in <module> 
    cross_entropy = >tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, >logits=y_conv)) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/ops/nn_ops.py", line 1617, in >softmax_cross_entropy_with_logits 
    precise_logits, labels, name=name) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/ops/gen_nn_ops.py", line 2265, in >_softmax_cross_entropy_with_logits 
    features=features, labels=labels, name=name) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/framework/op_def_library.py", line 763, in >apply_op 
    op_def=op_def) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/framework/ops.py", line 2327, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/Library/Python/2.7/site->packages/tensorflow/python/framework/ops.py", line 1226, in __init__ 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): logits and labels must >be same size: logits_size=[1,2] labels_size=[50,2] 
    [[Node: SoftmaxCrossEntropyWithLogits = >SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, >_device="/job:localhost/replica:0/task:0/cpu:0"](Reshape_2, Reshape_3)]] 

代碼導致錯誤可以被視爲在模型中使用的變量here

尺寸:

  • X( ?,1682)

  • Y_(?,2)

  • X _history(?,290,290,1)
  • h_pool1(?,145,145,32)
  • h_pool2(?,73,73,64)
  • h_pool3(?,37,37,128)
  • h_pool4(?,19,19,256)
  • h_pool5(?,10,10,512)
  • h_fc1(?,1024)
  • h_fc1_drop(?,1024)
  • y_conv(?, 2)
+0

我創建了一個要點:https://gist.github.com/EricSEkong/eaa67da30390a4eb2d50c282f3a2e4c7 –

+0

如果是二進制評分,那麼爲什麼標籤尺寸是50x3? – Aaron

+0

哦,夥計!如此愚蠢。我會解決這個問題,看看。謝謝 –

回答

1

的問題是,你重塑你輸入批次(形狀50個訓練實例X 1682層的功能)爲[-1,290,290,1]在這一行:

x_history = tf.reshape(x, [-1, 290, 290, 1]) 

你可以看到形狀x_history

x_history.eval(feed_dict={x:batch[0], y_:batch[1], keep_prob:1.0}).shape 

=> (1, 290, 290, 1) 

這有效地把所有的功能爲您的一批50個實例,並把它在一個單一實例(第一個維度是1,其中它需要50),然後運行:運行該結束了通過網絡的其餘部分。 因此,您的cross-tratropy評估失敗,因爲它無法將單個輸出的50個目標標籤與網絡對齊。

您需要選擇圖層形狀,以便通過網絡保留批量維度(形狀打印輸出中的?)。做到這一點的一種方法是將你的特徵填充到1764,並重新設置爲[-1,42,42,1],因爲42 * 42 = 1764。

值得注意的是,2d卷積最常用於自然爲二維的圖像數據。鑑於您的功能不是二維的,您可能會更好地從一個更簡單的完全連接層網絡開始?

0

爲了突破這個問題,我結束了下降,從50批次大小一個

batch = create_batches(train_data_pairs, 1) 

,並顯着提高訓練的迭代次數。此外,爲了準確性,我對大量小片測試數據測試模型,然後採取評估的意思。

然而,這不僅僅是解決問題的方法,它讓我繼續探索TensorFlow的其他方面,並以不同的方式使用數據。

相關問題