Deep learning CNN训练的模型不';他似乎不在工作

Deep learning CNN训练的模型不';他似乎不在工作,deep-learning,pytorch,Deep Learning,Pytorch,我已经训练了一个CNN模型,我想根据新数据运行训练过的模型。然而,似乎训练模型没有像训练期间那样正确预测计数。我感觉模型没有使用PTH文件。有人能告诉我我做错了什么吗 import argparse import datetime import glob import os import random import shutil import time from os.path import join import numpy as np import pandas as pd import

我已经训练了一个CNN模型,我想根据新数据运行训练过的模型。然而,似乎训练模型没有像训练期间那样正确预测计数。我感觉模型没有使用PTH文件。有人能告诉我我做错了什么吗

import argparse
import datetime
import glob
import os
import random
import shutil
import time
from os.path import join

import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision.transforms import ToTensor
from tqdm import tqdm
import torch.optim as optim

from convnet3_eval import Convnet
from dataset2_eval import CellsDataset

parser = argparse.ArgumentParser('Predicting hits from pixels')
parser.add_argument('name',type=str,help='Name of experiment')
parser.add_argument('data_dir',type=str,help='Path to data directory containing images and gt.csv')
parser.add_argument('--weight_decay',type=float,default=0.0,help='Weight decay coefficient (something like 10^-5)')
parser.add_argument('--lr',type=float,default=0.0001,help='Learning rate')
args = parser.parse_args()

metadata = pd.read_csv(join(args.data_dir,'gt.csv'))
metadata.set_index('filename', inplace=True)


dataset = CellsDataset(args.data_dir,transform=ToTensor(),return_filenames=True)
dataset = DataLoader(dataset,num_workers=4,pin_memory=True)
model_path = '/base_model.pth'

model = Convnet()
optimizer = torch.optim.Adam(model.parameters(),lr=args.lr,weight_decay=args.weight_decay)

for images, paths in tqdm(dataset):

    targets = torch.tensor([metadata['count'][os.path.split(path)[-1]] for path in paths]) # B
    targets = targets.float()

    # code to print training data to a csv file
    filename=CellsDataset(args.data_dir,transform=ToTensor(),return_filenames=True)
    output = model(images) # B x 1 x 9 x 9 (analogous to a heatmap)
    preds = output.sum(dim=[1,2,3]) # predicted cell counts (vector of length B)
    print(preds)
    paths_test = np.array([paths])
    names_preds = np.hstack(paths)
    print(names_preds)                
    df=pd.DataFrame({'Image_Name':names_preds, 'Target':targets.detach(), 'Prediction':preds.detach()})
    print(df) 
    # save image name, targets, and predictions
    df.to_csv(r'model.csv', index=False, mode='a')


model.load_state_dict(torch.load(model_path))
model.eval()

将最后两行移动到加载权重的位置

model.load\u state\u dict(火炬加载(model\u路径))
model.eval()

在for循环的上方,在模型初始化的正下方。

将最后两行移到for循环之前,在for循环中进行预测。非常感谢!您是否引用了这两行:model=Convnet()optimizer=torch.optim.Adam(model.parameters(),lr=args.lr,weight\u decation=args.weight\u decay)如果我这样做,那么我会收到一条关于此输出=模型(图像)的错误消息。这两行:
model.load\u state\u dict(torch.load(model\u path))
model.eval()
。刚刚写了一个官方答案供参考。