Я запустил свой код в Colab и хочу сохранять свою модель каждые 10 эпох и снова загружать ее в Colab. Правильно ли мой кPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я запустил свой код в Colab и хочу сохранять свою модель каждые 10 эпох и снова загружать ее в Colab. Правильно ли мой к

Сообщение Anonymous »

Код: Выделить всё

import argparse
import numpy as np
import pandas as pd
import sys, os
from random import shuffle
import torch
import torch.nn as nn
from models.gcn import GCNNet
from utils import *

# training function at each epoch
def train(model, device, train_loader, optimizer, epoch,hidden,cell):
print('Training on {} samples...'.format(len(train_loader.dataset)))
model.train()
for batch_idx, data in enumerate(train_loader):
data = data.to(device)
optimizer.zero_grad()
output = model(data,hidden,cell)
loss = loss_fn(output, data.y.view(-1, 1).float().to(device))
loss.backward()
optimizer.step()
if batch_idx % LOG_INTERVAL == 0:
print('Train epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch,
batch_idx * len(data.x),
len(train_loader.dataset),
100.  * batch_idx / len(train_loader),
loss.item()))

def predicting(model, device, loader,hidden,cell):
model.eval()
total_preds = torch.Tensor()
total_labels = torch.Tensor()
print('Make prediction for {} samples...'.format(len(loader.dataset)))
with torch.no_grad():
for data in loader:
data = data.to(device)
output = model(data,hidden,cell)
total_preds = torch.cat((total_preds, output.cpu()), 0)
total_labels = torch.cat((total_labels, data.y.view(-1, 1).cpu()), 0)
return total_labels.numpy().flatten(),total_preds.numpy().flatten()

loss_fn = nn.MSELoss()
LOG_INTERVAL = 20

def main(args):
dataset = args.dataset
modeling = [GCNNet]
model_st = modeling[0].__name__

cuda_name = "cuda:0"
print('cuda_name:', cuda_name)

TRAIN_BATCH_SIZE = args.batch_size
TEST_BATCH_SIZE = args.batch_size
LR = args.lr

NUM_EPOCHS = args.epoch

print('Learning rate: ', LR)
print('Epochs: ', NUM_EPOCHS)

# Main program: iterate over different datasets
print('\nrunning on ', model_st + '_' + dataset )
processed_data_file_train = 'data/processed/' + dataset + '_train.pt'
processed_data_file_test = 'data/processed/' + dataset + '_test.pt'
if ((not os.path.isfile(processed_data_file_train)) or (not os.path.isfile(processed_data_file_test))):
print('please run create_data.py to prepare data in pytorch format!')
else:
train_data = TestbedDataset(root='data', dataset=dataset+'_train')
test_data = TestbedDataset(root='data', dataset=dataset+'_test')

# make data PyTorch mini-batch processing ready
train_loader = DataLoader(train_data, batch_size=TRAIN_BATCH_SIZE, shuffle=True,drop_last=True)
test_loader = DataLoader(test_data, batch_size=TEST_BATCH_SIZE, shuffle=False,drop_last=True)

# training the model
device = torch.device(cuda_name if torch.cuda.is_available() else "cpu")
model = modeling[0](k1=1,k2=2,k3=3,embed_dim=128,num_layer=1,device=device).to(device)

optimizer = torch.optim.Adam(model.parameters(), lr=LR)
best_mse = 1000
best_ci = 0
best_epoch = -1
#model_file_name = 'model' + model_st + '_' + dataset +  '.model'
result_file_name = 'result' + model_st + '_' + dataset +  '.csv'

epoch_nums=0
##TRAIN _ NUM OF EPOCHES
##model load
#model = model(args,kwargs)
#model = model.load_state_dict(torch.load("/content/drive/MyDrive/END DeepGLSTM-main/m2.pth"))
model=torch.load("/content/drive/MyDrive/END DeepGLSTM-main/m6.pth")
print("m6.pth loaded.")

for epoch in range(NUM_EPOCHS):
##epoch counter
epoch_nums += 1
if epoch_nums == 150:
#torch.save(model.state_dict(),"/content/drive/MyDrive/END DeepGLSTM-main/m3.pth")
torch.save(model,"/content/drive/MyDrive/END DeepGLSTM-main/m7.pth")
print("m7.pth successfuly saved at google drive.")
break
else:
hidden,cell = model.init_hidden(batch_size=TRAIN_BATCH_SIZE)
train(model, device, train_loader, optimizer, epoch+1,hidden,cell)
G,P = predicting(model, device, test_loader,hidden,cell)
ret = [rmse(G,P),mse(G,P),pearson(G,P),spearman(G,P),ci(G,P),get_rm2(G.reshape(G.shape[0],-1),P.reshape(P.shape[0],-1))]
if ret[1]

Я сохраняю его каждые 20,50,150, ... раз и перезагружаю снова, но размер сохраненных файлов (m*.pth) одинаков.



Правильно ли работает мой код?




И каждый раз, когда я запускаю его, он начинается с #1?




Правильно ли я делаю? Стоит ли мне что-то менять?

 

Подробнее здесь: [url]https://stackoverflow.com/questions/78831589/i-ran-my-code-in-colab-and-i-want-to-save-my-model-every-10-epochs-and-load-it-t[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»