سلام
من قصد دارم که یک مجموعه ای از وزن ها را در شبکه عصبی کانولوشن در pytorch مقدار صفر قرار دهم و این مقدار را فریز (freeze) کنم و نگذارم گرادیان مقدار آن را تغییر دهد. برای این منظور مقدار وزن را صفر قرار دادم ولی تغییر کرده و از حال صفر خارج می شود.
برای این کار دو تابع نوشته ام که یکی مدل را به vector تبدیل می کند و دیگری vector را به مدل کانولوشن برمیگرداند. کد نوشته شده به صورت زیر است:
vector = model2vector(model)
if epoch>0:
vector[1000:2000] = 0
model = vector2model(model,Vector)
batch_data, batch_target = Variable(x.cuda()), Variable(target.cuda())
optimizer.zero_grad()
output=model(batch_data)
loss=criterion(output,batch_target)
loss.backward()
optimizer.step()
در خط اخر حاصل عملیات گرادیان به شبکه اعمال می شود و بسیاری از مقادیر صفر شده تغییر می کنند. به چه صورت می توانم این مشکل را بر طرف کنم؟
ممنون میشم راهنمایی کنید