TAGNNコードの解釈

みなさん、こんにちは。前のブログ投稿の論文読みました。何もありません。自分で書くことはできません。

ディープラーニングQQグループ277356808でのビデオ推奨について

ビデオ推奨ディープラーニングとこのグループ

ディープラーニングのビジュアル向けQQグループ629530787

視覚的な深層学習とこれ、間違いありません

ここであなたのことを待ってる

あまり追加しないでください。必要ありません。さらに、このWebページでプライベートチャット/プライベートメッセージを受け入れないでください。

私は最初にエラーを報告しました、ああああああああああああああああああああああ、人生はまだ難しいです、それを修正する方法。[さりげなく言った]

1- GNNのデータを直接使用し、エラー見つけます

epoch:  0
/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/optim/lr_scheduler.py:122: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
  "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning)
start training:  2020-10-30 11:20:35.947314
[0/5839] Loss: 10.6708
/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel(Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [with Dtype = float, Acctype = float]: block: [0,0,0], thread: [8,0,0] Assertion `t >= 0 && t < n_classes` failed.
Traceback (most recent call last):
  File "main.py", line 69, in <module>
    main()
  File "main.py", line 48, in main
    hit, mrr = train_test(model, train_data, test_data)
  File "/data1/xulm1/TAGNN/model.py", line 139, in train_test
    loss.backward()
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/tensor.py", line 195, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/autograd/__init__.py", line 99, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: CUDA error: device-side assert triggered

検索の結果、カテゴリの数が多すぎるか少なすぎることがわかったため、n_nodeを1ずつ増減しても同じエラーになります。WOC、コードを詳しく見て、データ処理部分が同じかどうかを確認することしかできません。

    train_data = pickle.load(open('./datasets/' + opt.dataset + '/train.txt', 'rb'))
    test_data = pickle.load(open('./datasets/' + opt.dataset + '/test.txt', 'rb'))

#对于sample
>>> len(train_data[0])
1205
>>> len(train_data[1])
1205

>>> len(test_data[0])
99
>>> len(test_data[1])
99

基本的に、トレーニングセットデータは入力シーケンスと次のクリックで「inputs-label」を形成することで構成されていることは確かです。digineticaデータセットの場合、以前のデータストレージを変更した可能性があります。

次の例を考えてみましょう。

>>> train_data[0][-5:]
[[272, 287, 287, 287, 271], [272, 287, 287, 287], [272, 287, 287], [272, 287], [272]]
>>> train_data[1][-5:]
[287, 271, 287, 287, 287]

時系列のクリックシーケンス[272、287、287、287、271]の場合、次のように4つの入力ラベルに分割できます。

 [272、287、287、287] -271

[272、287、287] -287

[272、287] -287

[272] -287

したがって、次のようにデータをリロードして表示し、n_node = 43137 [1ずつ増やす]と、正しい実行結果を得ることができます。

>>> np.min(train_data[1])
1
>>> np.max(train_data[1])
43136
start training:  2020-10-30 14:49:05.805033
[0/13] Loss: 5.7167
[3/13] Loss: 5.7231
[6/13] Loss: 5.7123
[9/13] Loss: 5.7171
[12/13] Loss: 5.7065
	Loss:	74.300
start predicting:  2020-10-30 14:49:06.557334
Best Result:
	Recall@20:	11.1111	MMR@20:	1.6607	Epoch:	0,	0

2-小さなビデオデータテスト

小さなビデオデータは比較的小さいので、実行時間を確認できます。ユーザーは約40万人、アイテムは約8万人です。ただし、シーケンス長が比較的長い(40〜50)ことを考慮して、2〜8のランダムポアソン分布の開始点インデックスを使用して計算します。

問題の1つは、トレーニングデータにuidが記録されていないことです。何が問題なのか、最初に記録するのではなく、最初に効果をテストしましょう。

  File "mymain.py", line 28, in main
    train_data,test_data =dat.load_data()
  File "/data1/xulm1/TAGNN/utils.py", line 163, in load_data
    return (train_seq,train_label) (test_seq,test_label)
TypeError: 'tuple' object is not callable

このエラーは、コード内の2つの()の間にコンマがないことです。忘れてください 

    input_in = torch.matmul(A[:, :, :A.shape[1]], self.linear_edge_in(hidden)) + self.b_iah
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 87, in forward
    return F.linear(input, self.weight, self.bias)
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/nn/functional.py", line 1372, in linear
    output = input.matmul(weight.t())
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)

問題は、カテゴリの数が正しくないことです。変更するだけです。

変更直後にメモリがバーストしました。なんてめちゃくちゃ。できません。

RuntimeError: CUDA out of memory. Tried to allocate 2.68 GiB (GPU 0; 10.73 GiB total capacity; 6.46 GiB already allocated; 763.56 MiB free; 9.14 GiB reserved in total by PyTorch)

明日、redisストレージを見てみましょう。それとも、ユーザー数を減らす必要がありますか?100,000人のユーザーで試してみませんか?次のデータを試しましたが、遅すぎます。

(1140664, 2)
Train Lines: 850791
user numner 58098, test_seq length 58098, test_label length 58098
users , [    0     1     2 ... 58095 58096 58097]
The number of users: 58098
The number of items: 47681
The number of ratings: 1140664
Average actions of users: 19.63
Average actions of items: 23.92
The sparsity of the dataset: 99.958823%
-------------------------------------------------------
epoch:  0
/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/optim/lr_scheduler.py:122: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
  "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning)
start training:  2020-10-30 20:42:16.552962
[0/8508] Loss: 10.7723

しかし、待っていたのはスムーズな実装ではなく、エラーでした。コーディングは1から始めなければならないようです。

RuntimeError: CUDA error: device-side assert triggered
/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel(Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [with Dtype = float, Acctype = float]: block: [0,0,0], thread: [0,0,0] Assertion `t >= 0 && t < n_classes` failed.

コードは変更されていません。上記はメモリ不足です。他にもタイミングタスクが実行されていることがわかり、実行して調べました。

/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: void cunn_ClassNLLCriterion_updateOutput_kernel(Dtype *, Dtype *, Dtype *, long *, Dtype *, int, int, int, int, long) [with Dtype = float, Acctype = float]: block: [0,0,0], thread: [2,0,0] Assertion `t >= 0 && t < n_classes` failed.
Traceback (most recent call last):
  File "mymain.py", line 65, in <module>
    main()
  File "mymain.py", line 44, in main
    hit, mrr = train_test(model, train_data, test_data)
  File "/data1/xulm1/TAGNN/model.py", line 139, in train_test
    loss.backward()
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/tensor.py", line 195, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/autograd/__init__.py", line 99, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: CUDA error: CUBLAS_STATUS_INTERNAL_ERROR when calling `cublasSgemm( handle, opa, opb, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)`

>>> torch.cuda.is_available()
True

エンコーディングを変更する必要があります。1から合計が1増加してn_nodeになります。変更後は正常に実行できますが、速度が遅すぎます。ただし、トレーニングメモリが解放されないため、予測中にメモリが不足します。

The number of users: 58098
The number of items: 47681
The number of ratings: 1140664
Average actions of users: 19.63
Average actions of items: 23.92
The sparsity of the dataset: 99.958823%
-------------------------------------------------------
epoch:  0
/home/xulm1/anaconda3/lib/python3.7/site-packages/torch/optim/lr_scheduler.py:122: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
  "https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning)
start training:  2020-11-01 15:15:19.663547
[0/8503] Loss: 10.7745
[1701/8503] Loss: 6.2509
[3402/8503] Loss: 5.0878
[5103/8503] Loss: 4.9218
[6804/8503] Loss: 4.8871
	Loss:	45659.489
start predicting:  2020-11-01 15:33:33.184119
Traceback (most recent call last):
  File "mymain.py", line 65, in <module>
    main()
  File "mymain.py", line 44, in main
    hit, mrr = train_test(model, train_data, test_data)
  File "/data1/xulm1/TAGNN/model.py", line 151, in train_test
    targets, scores = forward(model, i, test_data)
  File "/data1/xulm1/TAGNN/model.py", line 125, in forward
    return targets, model.compute_scores(seq_hidden, mask)
  File "/data1/xulm1/TAGNN/model.py", line 92, in compute_scores
    scores = torch.sum(a * b, -1)  # b,n
RuntimeError: CUDA out of memory. Tried to allocate 1.78 GiB (GPU 0; 10.73 GiB total capacity; 8.61 GiB already allocated; 751.56 MiB free; 9.15 GiB reserved in total by PyTorch)

人生は難しいので、GPUの奇妙なことを思い出しますこの種の奇妙なことに対処する方法。1つの問題は他のGPUリソ​​ースを占有することです。この問題は、GPUが非常に不足している場合に非常に顕著になります。

まず?または別のサーバーを試してみますか?現在、冗長サーバーはありません。疲れた。

次回変更してください。GPUがなければ、1080で十分です。

 

すぐに戻ることをお勧めします、

あなたは戻りたくないと言います、ただあなたを抱きしめるように私に言ってください

長い潮風がやさしく吹く、

野火を冷やし、

私はあなたが悲しいのを見ました、

あなたは私がどのように進んで行くのかを言います、

苦味も綺麗ですが、

泣き止む方法、そっと髪にキスしなきゃ

風を吹き続けましょう、

遠ざかるのに耐えられない。

 

 

おすすめ

転載: blog.csdn.net/SPESEG/article/details/109379980