def Scramble_acton(net, ort, inputs, dpinda, hocmat):
# copies net in ort
for lr in range(0,6):
for bi in range(0,BATCHSIZE):
for no in range(0,int(lrsize[lr][0])):
if lrsize[lr][1] == 1:
ort.nx[lr][bi][no] = net.nx[lr][bi][no]
if lrsize[lr][1] != 1:
for xi in range(0,int(lrsize[lr][1])):
for yi in range(0,int(lrsize[lr][1])):
ort.nx[lr][bi][no][xi][yi] = \
net.nx[lr][bi][no][xi][yi]
Привет, ребята, я передаю этой функции две модели нейронной сети pytorch (net и ort), затем копирую все выходные значения из одного (net) в другое (ort). При этом увеличивается выделение памяти (чего я не ожидал) и после некоторого цикла происходит сбой программы. Я пытался использовать copy.deepcopy для создания копии, но я получил сообщение «Только Tensors, созданные явно пользователем (графические листья), поддерживают протокол deepcopy». Спасибо, Алекс
Это определение модели:
class Net(nn.Module):
def __init__(self, x):
super(Net, self).__init__()
self.pool = nn.MaxPool2d (2,2)
self.conv1 = nn.Conv2d ( 3,10,5)
self.conv2 = nn.Conv2d (10,16,5)
self.fc3 = nn.Linear (16*5*5,120)
self.fc4 = nn.Linear (120,84)
self.fc5 = nn.Linear (84,10)
lrsize[0][0] = 3; lrsize[0][1] =32
lrsize[1][0] = 10; lrsize[1][1] =14
lrsize[2][0] = 16*5*5; lrsize[2][1] = 1
lrsize[3][0] = 120; lrsize[3][1] = 1
lrsize[4][0] = 84; lrsize[4][1] = 1
lrsize[5][0] = 10; lrsize[5][1] = 1
self.nx = np.empty(6, dtype=np.object)
self.nl = np.empty(6, dtype=np.object)
self.nl[1] = self.conv1
self.nl[2] = self.conv2
self.nl[3] = self.fc3
self.nl[4] = self.fc4
self.nl[5] = self.fc5
self.forward(x,0,0)
def forward(self, x0, opt, sitnx):
#Tanhact # torch.sigmoid
xx = self.nx; xx[0] = x0
if opt == 1: xx = sitnx
self.nx[1] = self.pool(Tanhact(self.conv1(xx[0])))
self.nx[2] = self.pool(Tanhact(self.conv2(xx[1])))
self.nx[2] = self.nx[2].view(-1, 16*5*5)
xt = self.fc3(xx[2]); self.nx[3] = Tanhact(SLOPETP*xt)
xt = self.fc4(xx[3]); self.nx[4] = Tanhact(SLOPETP*xt)
xt = self.fc5(xx[4]); self.nx[5] = Tanhact(SLOPETP*xt)
nx [] содержит значения слоя, BATCHSIZE = 25
Я пришел из C, я Я просто хотел сделать копию тензора / массива, но здесь происходит нечто странное.
![call stack between 3rd and 4th for](https://i.stack.imgur.com/EB2fu.png)