#neural-network #pytorch
Вопрос:
Я тренирую многозадачную модель глубокого обучения PyTorch
для задачи множественной регрессии. В частности, у меня есть две цели, и у меня возникли проблемы с их извлечением из test_loader.
Если я получу только одну партию, то получу следующее:
for data in test_loader: break gt;gt;data.y #I'm using PyTorch Geometric and this returns target values [tensor([2.9700e-01, 1.8467e 00, 3.3684e 00, 3.8116e 00, 2.1730e-01, 5.5520e-01, 7.3400e-02, 6.7590e-01, 5.3810e-01, 2.4115e 00, 6.1850e-01, 1.9349e 00, 1.0159e 00, 1.1960e-01, 2.9608e 00, 1.1410e 00, 1.1750e-01, 3.0245e 00, 3.4690e-01, 9.4170e-01, 8.6340e-01, 4.9826e 00, 8.9060e-01, 2.7065e 00, 3.1614e 00, 2.0877e 00, 1.7380e 00, 2.6640e 00, 1.3882e 00, 8.0730e-01, 2.6480e 00, 4.9870e-01, 5.4130e-01, 4.5343e 00, 2.6000e-03, 2.2055e 00, 2.6452e 00, 3.1537e 00, 2.7212e 00, 4.4586e 00, 5.3340e-01, 1.0260e-01, 3.8350e-01, 1.1600e-02, 1.4039e 00, 3.0600e 00, 4.8800e-02, 3.4395e 00, 3.4467e 00, 4.9220e 00, 2.5419e 00, 1.8968e 00, 4.0945e 00, 2.6912e 00, 1.2257e 00, 2.4072e 00, 3.0066e 00, 2.8466e 00, 2.3789e 00, 1.7575e 00, 2.6239e 00, 5.6946e 00, 1.3764e 00, 4.7800e-02, 1.7183e 00, 1.5300e 00, 8.5700e-01, 4.1565e 00, 4.5367e 00, 9.7040e-01, 2.9508e 00, 5.6663e 00, 4.8030e-01, 5.0944e 00, 2.6179e 00, 2.8660e-01, 2.7508e 00, 1.6350e-01, 6.9520e-01, 4.2832e 00, 9.3240e-01, 5.7414e 00, 1.1040e-01, 6.6690e-01, 2.8895e 00, 2.9176e 00, 4.2810e-01, 5.2340e 00, 2.2622e 00, 3.2822e 00, 4.6950e-01, 3.0513e 00, 3.9308e 00, 3.6964e 00, 2.0200e-02, 2.3557e 00, 1.7065e 00, 2.8084e 00, 2.2530e 00, 4.3140e-01, 4.2487e 00, 4.2352e 00, 2.2331e 00, 5.1698e 00, 4.0534e 00, 4.5324e 00, 4.1176e 00, 9.7360e-01, 2.6766e 00, 4.7660e 00, 4.3731e 00, 2.1380e-01, 5.1878e 00, 3.0986e 00, 5.8438e 00, 3.3690e 00, 3.6450e 00, 1.7497e 00, 4.3989e 00, 3.0263e 00, 4.8384e 00, 4.3009e 00, 5.0180e-01, 1.3067e 00, 1.0911e 00, 5.1182e 00, 4.2368e 00, 2.9340e 00]), tensor([-3.2216, -2.0006, -0.8724, -0.7857, -2.0937, -0.5880, -0.1444, -1.2542, -1.4671, -1.8303, -0.4976, -1.7154, -0.4975, -0.3465, -3.2251, -0.9821, -3.4257, -0.8081, -0.8262, -0.7048, -0.9562, -1.6014, -0.9571, -2.6037, -2.9677, -1.5079, -1.5834, -1.6801, -2.4680, -3.5596, -1.8807, -0.8356, -0.4993, -3.2280, -0.2746, -2.7333, -0.5740, -3.1329, -1.3730, -2.9125, -3.0086, -1.7985, -0.5292, -2.1010, -1.3797, -0.6524, -1.5601, -1.5005, -1.3369, -1.2464, -0.4897, -2.7310, -0.6254, -3.6283, -2.2886, -0.5919, -2.7681, -1.4977, -3.1605, -2.8174, -1.2291, -1.6025, -0.2486, -2.6170, -0.7761, -0.8276, -0.1415, -2.8051, -1.9874, -0.5155, -1.5940, -2.6758, -1.4691, -3.1783, -0.2966, -2.3155, -0.8844, -2.2093, -0.4627, -3.3262, -1.5778, -2.8662, -0.2760, -0.6699, -3.4056, -0.5907, -0.7972, -1.7826, -2.1572, -1.5537, -1.8523, -2.3121, -0.4772, -3.3559, -2.4694, -1.5811, -1.6458, -2.1036, -2.0809, -1.3649, -0.6173, -1.7415, -2.0036, -2.9653, -3.1574, -2.6495, -1.6283, -0.4403, -2.4322, -3.6548, -3.0187, -0.2075, -2.9463, -2.8336, 0.0300, -1.7765, -2.1068, -3.1375, -3.3158, -3.0454, -3.6105, -0.6832, -2.2353, -1.6552, -1.5867, -3.2761, -3.3904, -1.6116])]
Так data.y
что это просто список из двух torch.tensor
, и каждый элемент в списке имеет форму data.y[0].shape
= data.y[1].shape
= torch.Size([128])
Первый вопрос: Как я могу получить весь свой набор тестов?
Я хотел бы получить окончательный тензор размера [n_entries_test_set, 2]
, содержащий все записи в моем исходном наборе тестов, прежде чем создавать загрузчик тестов для pytorch (у каждой записи есть две связанные цели).
Второй вопрос: Как я могу получить полный набор прогнозов с помощью моей модели?
Аналогично, как и раньше, если я возьму один пакет данных, выполнив
for data in test_loader: break
затем, выполнив model.forward(data)
, я получаю:
tensor([[ 0.0286, -0.2509], [ 0.0287, -0.2527], [ 0.0279, -0.2500], [ 0.0268, -0.2472], [ 0.0280, -0.2508], [ 0.0272, -0.2486], [ 0.0244, -0.2413], [ 0.0275, -0.2486], [ 0.0292, -0.2534], [ 0.0300, -0.2560], [ 0.0282, -0.2504], [ 0.0266, -0.2469], [ 0.0272, -0.2494], [ 0.0273, -0.2488], [ 0.0251, -0.2422], [ 0.0269, -0.2472], [ 0.0258, -0.2438], [ 0.0280, -0.2503], [ 0.0275, -0.2495], [ 0.0299, -0.2555], [ 0.0278, -0.2493], [ 0.0266, -0.2467], [ 0.0277, -0.2505], [ 0.0277, -0.2496], [ 0.0266, -0.2469], [ 0.0251, -0.2425], [ 0.0270, -0.2468], [ 0.0288, -0.2525], [ 0.0274, -0.2491], [ 0.0279, -0.2494], [ 0.0266, -0.2465], [ 0.0269, -0.2466], [ 0.0247, -0.2419], [ 0.0268, -0.2483], [ 0.0268, -0.2464], [ 0.0284, -0.2519], [ 0.0271, -0.2477], [ 0.0274, -0.2490], [ 0.0291, -0.2529], [ 0.0287, -0.2526], [ 0.0272, -0.2480], [ 0.0266, -0.2471], [ 0.0223, -0.2357], [ 0.0280, -0.2501], [ 0.0275, -0.2487], [ 0.0282, -0.2507], [ 0.0273, -0.2489], [ 0.0265, -0.2464], [ 0.0293, -0.2538], [ 0.0277, -0.2491], [ 0.0289, -0.2526], [ 0.0261, -0.2456], [ 0.0271, -0.2469], [ 0.0255, -0.2432], [ 0.0263, -0.2457], [ 0.0259, -0.2450], [ 0.0279, -0.2494], [ 0.0268, -0.2460], [ 0.0248, -0.2409], [ 0.0290, -0.2529], [ 0.0281, -0.2504], [ 0.0286, -0.2518], [ 0.0262, -0.2474], [ 0.0259, -0.2446], [ 0.0258, -0.2447], [ 0.0268, -0.2480], [ 0.0274, -0.2486], [ 0.0278, -0.2501], [ 0.0268, -0.2460], [ 0.0276, -0.2487], [ 0.0284, -0.2511], [ 0.0283, -0.2510], [ 0.0291, -0.2536], [ 0.0284, -0.2510], [ 0.0274, -0.2483], [ 0.0258, -0.2447], [ 0.0273, -0.2479], [ 0.0293, -0.2544], [ 0.0272, -0.2479], [ 0.0268, -0.2474], [ 0.0274, -0.2482], [ 0.0276, -0.2492], [ 0.0265, -0.2457], [ 0.0249, -0.2417], [ 0.0258, -0.2448], [ 0.0272, -0.2483], [ 0.0296, -0.2538], [ 0.0288, -0.2527], [ 0.0290, -0.2527], [ 0.0257, -0.2437], [ 0.0257, -0.2441], [ 0.0281, -0.2507], [ 0.0280, -0.2503], [ 0.0243, -0.2413], [ 0.0260, -0.2446], [ 0.0253, -0.2426], [ 0.0240, -0.2402], [ 0.0293, -0.2543], [ 0.0261, -0.2455], [ 0.0262, -0.2446], [ 0.0265, -0.2460], [ 0.0298, -0.2546], [ 0.0282, -0.2502], [ 0.0281, -0.2509], [ 0.0278, -0.2499], [ 0.0286, -0.2517], [ 0.0280, -0.2497], [ 0.0265, -0.2457], [ 0.0269, -0.2471], [ 0.0249, -0.2431], [ 0.0287, -0.2520], [ 0.0311, -0.2579], [ 0.0289, -0.2524], [ 0.0257, -0.2443], [ 0.0275, -0.2482], [ 0.0284, -0.2513], [ 0.0270, -0.2474], [ 0.0246, -0.2417], [ 0.0270, -0.2477], [ 0.0269, -0.2482], [ 0.0267, -0.2477], [ 0.0289, -0.2517], [ 0.0263, -0.2455], [ 0.0285, -0.2521], [ 0.0295, -0.2540], [ 0.0266, -0.2471], [ 0.0267, -0.2465], [ 0.0271, -0.2478]], grad_fn=lt;AddmmBackward0gt;)
и это прогнозы моей модели для одной партии данных. Как я могу получить полный набор прогнозов для всех пакетов?
Что я хочу сделать, так это просто получить окончательный набор прогнозов и набор исходных значений test_ для выполнения некоторых стандартных показателей и посмотреть, как моя модель работает с новыми невидимыми данными.
Большое спасибо, и дайте мне знать, если для моего вопроса могут потребоваться какие-либо дополнительные подробности.
Ответ №1:
Если я правильно понимаю этот вопрос, все, что вам нужно, — это только один пакет, содержащий весь ваш набор данных.
Вы можете сказать DataLoader
именно это.
test_set = MyDataset(...) # your Dataset instance test_loader = DataLoader(test_set, batch_size=len(test_set), ...)
Поскольку вы загружаете весь свой набор тестов, будьте осторожны, чтобы не превысить объем доступной памяти.