Проект должен многократно повторять данные, а затем усреднять их
gradslist = []
for data_epoch in interval_steps:
output = cnn.forward(b_x)[0]
loss = nn.CrossEntropyLoss()(output, b_y)
cnn.zero_grad()
loss.backward()
w_c1 = cnn.conv1[0].weight.grad
b_c1 = cnn.conv1[0].bias.grad
w_c2 = cnn.conv2[0].weight.grad
b_c2 = cnn.conv2[0].bias.grad
w_o = cnn.out.weight.grad
b_o = cnn.out.bias.grad
grads = [w_c1,b_c1,w_c2,b_c2,w_o,b_o]
gradslist.append(grads)
w_c1 type= torch.Tensor shape= torch.Size([64, 1, 5, 5])
b_c1 type= torch.Tensor shape= torch.Size([64])
w_c2 type= torch.Tensor shape= torch.Size([144, 64, 5, 5])
b_c2 type= torch.Tensor shape= torch.Size([144])
w_o type= torch.Tensor shape= torch.Size([10, 2304])
b_o type= torch.Tensor shape= torch.Size([10])
Я хочу среднее
avggrads = [avg_w_c1, avg_b_c1, avg_w_c2, avg_b_c2, avg_w_o, avg_w_0]
Результат avggrads не является списком значений, но список torch.tensor, такой как avg_w_c1.shape = torch.size ([64, 1, 5, 5]), а не значение. это среднее значение corresponding position (Matrix averaging)
. Посоветуйте, пожалуйста, как усреднить несколько градов в списке.