#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())
.