Чтобы увидеть результат pcl mnist, я хочу вернуть скрытый слой dnn в формате numpy

#python #deep-learning #pytorch

Вопрос:

Я хочу сохранить значения ‘input'(x) и z[1] ((self.fc1(x.view(-1, self.in_dim)))) и a[1] в качестве переменных внутри прямой функции. После этого я хочу вернуть его с помощью logit и сохранить в формате NumPy. Или я хочу преобразовать результат из тензора в формат numpy и сохранить его. Как я могу сэкономить с помощью NumPy?

Ниже приведен пример кода, похожего на мой

 class MLP(nn.Module):  def __init__(self):  super().__init__()   self.in_dim = 28 * 28  self.out_dim = 10   self.fc1 =nn.Linear(self.in_dim,512)  self.fc2=nn.Linear(512, 256)  self.fc3 =nn.Linear(256, 128)  self.fc4 =nn.Linear(128, 64)  self.fc5 =nn.Linear(64, self.out_dim)   self.relu = nn.ReLU()   def forward(self, x):  print("x",x.shape)  a1 = self.relu(self.fc1(x.view(-1,self.in_dim)))  print("a1",a1.shape)  a2 = self.relu(self.fc2(a1))  a3 = self.relu(self.fc2(a2))  a4 = self.relu(self.fc2(a3))  logit = self.fc5(a4)   return logit  

Комментарии:

1. Непонятно, о чем z[1] идет речь, вы имеете в a1 виду ?. Можете ли вы яснее сказать, чего именно вы хотите?

2. И то и другое! Я думал, что способ хранения переменной и сохранения ее от возврата в numpy будет таким же.

3. Ты не ответил на мои вопросы. Можете ли вы сказать, что z[1] именно? Какие промежуточные результаты вы хотите вернуть?

4. О, значение z[1] означает (self.fc1(x.view(-1, self.in_dim))

Ответ №1:

Вы можете возвращать как a1, так и входы из функции forward:

 def forward(self, x):  a1 = self.relu(self.fc1(x.view(-1,self.in_dim)))  a2 = self.relu(self.fc2(a1))  a3 = self.relu(self.fc2(a2))  a4 = self.relu(self.fc2(a3))  logit = self.fc5(a4)   return a1, logit  

Комментарии:

1. Проблема в том, чтобы вернуть его, а затем сохранить в формате numpy.

2. Тогда ты сможешь это сделать np.save(filepath, a1.numpy()) .