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