2017-06-19 4 views
1

最初のプロジェクトはpytorchで、私はMNISTラベル 'int'をトーチ 'Variable'に変換しようとしました。デバッガに次元がないと言っていますか?'int'をpytorchに変換する 'variable'は問題を作ります

# numpy mnist data 
X_train, Y_train = read_data("training") 
X_test , Y_test = read_data("testing") 

arr = np.zeros(5) 
for i in range(5): 
    # in your training loop: 
    costs_ = 0 
    for k in range(10000): 
     optimizer.zero_grad()       # zero the gradient buffers 
     a = torch.from_numpy(np.expand_dims(X_train[k].flatten(), axis=0)).float() 
     b = torch.from_numpy(np.array(Y_train[k], dtype=np.float)).float() 
     input = Variable(a) 
     output = net(input) 
     target = Variable(b)        # PROBLEM!! 
     loss = criterion(output, target) 
     loss.backward() 
     optimizer.step()         # Does the update 

     costs_ += loss.data.numpy() 
    arr[i] = costs_ 
    print(i) 

スローエラーがある:「例外RuntimeError:入力とターゲットは異なる数の要素を有する:入力[1×1] 1つの要素を有する、ターゲットは[]/B /ホイール/ pytorch-SRC/AT 0の要素を有していますtorch/lib/THNN/generic/MSECriterion.c:12 "

答えて

1

エラーは何が起きているかを正確に伝えています。 target変数が空です。

編集(以下のコメントの後):その後、

Y_train[k] = 5場合、np.array(Y_train[k], dtype=np.float).shape =()、そして今度Variable(b)で無次元とテンソルになります。

この問題を解決するには、整数または浮動小数点数ではなく、np.array()にリストを渡す必要があります。このよう

b = torch.from_numpy(np.array([Y_train[k]], dtype=np.float)).float() 
+0

ありません、それは空ではありません。私が "print(Y_train [k])"を実行すると、端末の "5"が表示されます。 –

+0

私は答えを編集しました。これは間違いなくそれであるはずです。また、将来の読者のために、 'X_train'、' Y_train'、 'X_test'と' Y_test'の入力の次元と 'output'の次元について、あなたの質問を編集するように依頼します。 – entrophy

関連する問題