Interpretación del código TAGNN

Hola, buenos chicos , leí el artículo de la publicación anterior del blog y no es nada, no puedo escribirlo yo mismo, jaja.

Para recomendación de video en el grupo QQ de aprendizaje profundo 277356808

Aprendizaje profundo de recomendación de video más este grupo

Para Visual en aprendizaje profundo QQ Group 629530787

Aprendizaje profundo visual más esto, no se equivoque

Estoy aqui esperando por ti

No agregue tanto, no es necesario, además, ¡no acepte chat privado / mensaje privado en esta página web! ! !

Informé de un error al principio, ah ah ah ah ah ah ah ah ah ah, la vida sigue siendo difícil, cómo solucionarlo. [Solo dije casualmente]

1- Usa los datos en GNN directamente y encuentra un error

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

La búsqueda encontró que el número de categorías es demasiado o muy poco, por lo que aumentar o disminuir n_node en 1 es el mismo error. WOC, solo puede mirar más de cerca el código y ver si la parte de procesamiento de datos es la misma.

    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

Básicamente, es seguro que los datos del conjunto de entrenamiento se componen de la secuencia de entrada y el siguiente clic para formar la "etiqueta de entradas", y para el conjunto de datos diginetica es posible que haya cambiado el almacenamiento de datos anterior.

Considere el siguiente ejemplo:

>>> 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]

Para la secuencia de clics cronológica [272, 287, 287, 287, 271], se puede dividir en 4 entradas-etiquetas, de la siguiente manera:

 [272, 287, 287, 287] ——271

[272, 287, 287] —— 287

[272, 287] —— 287

[272] —— 287

Entonces puedo volver a cargar los datos para ver, de la siguiente manera, n_node = 43137 [para aumentar en 1], para obtener el resultado de ejecución correcto

>>> 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- Prueba de datos de video pequeños

Los datos de video pequeños son relativamente pequeños, puede ver el tiempo de ejecución. El usuario es de aproximadamente 400.000 y el artículo es de aproximadamente 80.000. Sin embargo, en vista de la longitud de secuencia relativamente larga (40 ~ 50), se utiliza para calcular el índice de punto de partida de la distribución aleatoria de Poisson de 2 ~ 8.

Un problema es que no hay ningún uid registrado en los datos de entrenamiento. . . . . . ¿Qué pasa? No lo grabes primero, primero probemos el efecto.

  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

Este error es que no hay coma entre los dos () en el código, olvídalo 

    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)

El problema es que el número de categorías es incorrecto. Solo modifícalo.

La memoria estalló directamente después de la modificación. . . . . . Que desastre. No puedo hacerlo.

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)

Echemos un vistazo al almacenamiento de Redis mañana, ¿o debería intentar reducir la cantidad de usuarios? ¿Probar con 100.000 usuarios? Probé los siguientes datos, es demasiado lento.

(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

Pero lo que esperaba no era una implementación fluida, sino un error. Parece que la codificación debe comenzar desde 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.

El código no se ha cambiado. Lo anterior es memoria insuficiente. Encontré que hay otras tareas de sincronización en ejecución, y lo ejecuté y lo encontré.

/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

La codificación debe cambiarse. A partir de 1, el total se incrementa en 1 a n_nodo. Después del cambio, se puede ejecutar normalmente, pero la velocidad es demasiado lenta. Sin embargo, todavía no hay suficiente memoria durante la predicción, porque la memoria de entrenamiento no se libera.

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)

La vida es difícil y me recuerda las cosas extrañas de las GPU . Cómo lidiar con este tipo de cosas raras, un problema es que consume otros recursos de la GPU, este problema es muy importante cuando la GPU es muy escasa.

¿Primeramente? ¿O prueba con otro servidor? Actualmente no hay servidores redundantes. . . . . . . . Cansado.

Cámbielo la próxima vez. Sin GPU, 1080 está bien.

 

Te aconsejo que vuelvas pronto,

Dices que no quieres volver, solo dime que te abrace

La larga brisa marina sopla suavemente,

Enfriado el incendio forestal

Te vi triste

Tu dices como estoy dispuesto a ir

La amargura también es hermosa,

Como dejar de llorar, tengo que besar suavemente tu cabello

Deja que el viento siga soplando

No puedo soportar estar lejos.

 

 

Supongo que te gusta

Origin blog.csdn.net/SPESEG/article/details/109379980
Recomendado
Clasificación