Pytorchの高バージョン(1.0)のプログラムを実行すると、いくつかのエラーが発生します。
Pytorch high バージョン 1.0 ランナーからのいくつかのエラー
- 形状 [1, 28, 28] がブロードキャストの形状 [3, 28, 28] と一致しない場合のエラー出力
- エラー NotADirectoryError: [WinError 267] 無効なディレクトリ名です。
- Error 引数#3 'index'にLong型のスカラーオブジェクトを期待したが、Int型のスカラーを得た。
- エラー RuntimeError: バックエンドCUDAのオブジェクトを期待したが、引数#2 'other'のバックエンドCPUを得た。
- 0次元のテンソルをPythonに変換するには、tensor.item()を使用します。
- グラフィックカードの選択に関する問題
- Error RuntimeError: スカラータイプのオブジェクトを期待したが、引数#2 'other'にスカラータイプのIntを得た。
Python 2.7 + pytorch 0.4 のソースと Python 3.5 + pytorch 1.0 の環境なので、pytorch プログラムを実行します。
多くのエラーを出しながら実行されましたが、その内容はここに記されています。
形状[1, 28, 28]のエラー出力は、放送の形状[3, 28, 28]と一致しない
解決方法
https://github.com/udacity/deep-learning-v2-pytorch/pull/151
なぜなら
Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) を実行すると、次のようなエラーが発生します。
RuntimeError: 形状 [1, 28, 28] を持つ出力は、放送の形状 [3, 28, 28] と一致しない。
に変更する必要があります。
正規化((0.5,), (0.5,))
task_generator.py の get_data_loader に存在し、以下のコメントで変更されました。
def get_data_loader(task, num_per_class=1, split='train',shuffle=True,rotation=0):
# NOTE: batch size here is # instances PER CLASS
#normalize = transforms.Normalize(mean=[0.92206, 0.92206, 0.92206], std=[0.08426, 0.08426, 0.08426])
normalize = transforms.Normalize(mean=[0.92206], std=[0.08426])
dataset = Omniglot(task,split=split,transforms=transforms.Compose([Rotate(rotation),transforms.ToTensor(),normalize]))
if split == 'train':
sampler = ClassBalancedSampler(num_per_class, task.num_classes, task.train_num,shuffle=shuffle)
else:
sampler = ClassBalancedSampler(num_per_class, task.num_classes, task.test_num,shuffle=shuffle)
loader = DataLoader(dataset, batch_size=num_per_class*task.num_classes, sampler=sampler)
return loader
NotADirectoryErrorというエラーです。[WinError 267] 無効なディレクトリ名です。
この無効なディレクトリ名には長い間悩まされてきました。明らかにディレクトリパスは正常で、ファイルもそこにあるのに、なぜエラーが報告されるのでしょうか?
パス情報だけが必要で、ファイルには書き込まないから問題なのだと判明しました。
https://forums.fast.ai/t/notadirectoryerror-winerror-267-the-directory-name-is-invalid-data-bts-valid-features-npy/19657
エラー スカラー型のオブジェクトを期待したが、引数#3 'index'にスカラー型のIntを得た。
Long型のスカラーオブジェクトを期待したが、引数#3 'index'にInt型のスカラーオブジェクトを得た。
omniglot_train_one_shot.py に表示され、コメントのように修正されています。
mse = nn.MSELoss().cuda(GPU)
one_hot_labels = Variable(torch.zeros(BATCH_NUM_PER_CLASS * CLASS_NUM, CLASS_NUM).scatter_(1, batch_labels.view(-1, 1).long(),1)).cuda( GPU)
#one_hot_labels = Variable(torch.zeros(BATCH_NUM_PER_CLASS*CLASS_NUM, CLASS_NUM).scatter_(1, 1, batch_labels.view(-1,1))).cuda(GPU) #see scatter modification
loss = mse(relations,one_hot_labels)
実はネットで似たような問題がいろいろ出ているのを見たのですが、わざわざ原因を調べず、ただ早く解決しようと思って30分以上無駄にしてしまいました。
問題はscatterの関数引数にある。第2引数(selfを第3引数と数える)はtensorでなければならず、それが含む要素型はLongでなければならないが、元のプログラムではIntであった。
型変換を行うには
https://ptorch.com/news/71.html
スキャッターコードを投稿してください。
def scatter(self, dim, index, source): ...
@overload
def scatter_(self, dim: int, index: 'Tensor', src: 'Tensor') -> 'Tensor': ...
@overload #!!! It's this overload, you can see that the index is in tensor format, but the code requires the elements within it to be Long
def scatter_(self, dim: int, index: 'Tensor', value: float) -> 'Tensor': ...
Error RuntimeError: バックエンドCUDAのオブジェクトを期待したが、引数#2 'other'のバックエンドCPUを得た。
これは前回のものとよく似ていて、非常に紛らわしいです。
問題なのは
rewards = [1 if predict_labels[j]==test_labels[j] else 0 for j in range(CLASS_NUM)]
predict_labels と test_labels に問題があるので、デバッグの際にその値を確認してください。
predict_labels[j] = tensor([4, 0, 3, 1, 2], device='cuda:0')
test_labels[j] = tensor([4, 0, 3, 1, 2], dtype=torch.int32)
この2つは等しくなく、最初の値が等しくても、2つ目は等しくありません。一番困るのは、一方がdevice、一方がdtypeを持つことで、両方を統一する必要があります。
理由
: 0.4.0からdevice-agnosticの概念が変更されました(つまり、どのデバイスでコードを書いても実行できる、という意味です)。
以前のバージョンのPyTorchでは、デバイスに依存しないコードを書く(つまり、コードを修正せずにCUDA対応のデバイスやCPUのみのデバイスで実行する)ことが非常に困難でした。
PyTorch 0.4.0は以下から入手可能です。 2つの方法 は、コードの互換性を非常に簡単にします。
1. tensor の device プロパティは、全ての tensor に対して torch.device のデバイスを提供する。(注意: get_device は CUDA のテンソルに対してのみ利用可能である)
2.
メソッドに
テンソルやモジュールを使って、オブジェクトを異なるデバイスに簡単に移動させることができる(これまでのcpu()やcuda()メソッドの代わりに)。
ここでは、toメソッドを使用しました。
質問文の前に追加します。
predict_labels = predict_labels.to(device,dtype=torch.int32) # add
test_labels = test_labels.to(device) # add
問題解決しました。
参考にしてください。
https://ptorch.com/news/189.html
https://discuss.pytorch.org/t/expected-object-of-scalar-type-long-but-got-scalar-type-float-for-argument-2-target/33102/2
Error IndexError: 0-dimのテンソルのインデックスが無効です。0-dimのテンソルをPythonに変換するにはtensor.item()を使用します。
UserWarning: invalid index of a 0-dim tensor. This will be an error in PyTorch 0.5. Use tensor.item() to convert a 0-dim tensor to a Python number
train_loss += loss.data[0]
pytorchを最新版の0.4.0に更新すると、0.3.1のコードに対して上記の警告が出るので、次のバージョンでバグになることを警告している(ここでは1.0からやっている)。
取得元
https://blog.csdn.net/martinue/article/details/80342461
解決策
#Original statement.
train_loss+=loss.data[0]
#Modified.
train_loss+=loss.item()
#bingo
グラフィックカード選びの問題点
pytorchでグラフィックカードを選択する。
サーバー上でプログラムを実行する準備ができましたが、ブロック0が占有されています。.cuda(1)を指定しましたが、pytorchはまだブロック0としてプログラムを実行するように強制します。本当に頑固です。
やっと見つけた問題点:バグと考えるべきでしょう
参照
https://www.cnblogs.com/jisongxie/p/10276742.html
CUDA_VISIBLE_DEVICES を使用して、使用する GPU を少し制限します。
Error RuntimeError: スカラー型のオブジェクトを期待したが、引数#2 'other'にスカラー型のIntを得た。
この問題はほぼ1日私を苦しめています。pytorchのテンソルは、cpuまたはgpu、あるいは最初のgpuを指定します。
エラーが出続けます。
rewards = [1 if predict_labels[j]==test_labels[j] else 0 for j in range(CLASS_NUM)]
RuntimeError: Expected object of scalar type Long but got scalar type Int for argument #2 'other'
前の問題と似たような感じですが、うまくいかず、ドキュメントを見ても
対応するGPUをテンソルに追加してみましたが、やはりうまくいきません
test_labels = test_labels.to(device)
predict_labels = predict_labels.to(device)
最後に怒っている私は、比較を強制的にnumpyフォーマットにすることを選びました predict_labels[j] == test_labels[j]そしてそれはうまくいきました。
predict_labels = predict_labels.cpu().numpy()
test_labels = test_labels.cpu().numpy()
rewards = [1 if predict_labels[j]== test_labels[j] else 0 for j in range(CLASS_NUM)]
なんという粉砕エラー
ps pycharm pass in コマンドライン引数
実行/デバッグ設定->設定->スクリプトパラメ-ジ
https://www.cnblogs.com/darkknightzh/p/5670821.html
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例