解决Pytorch 加载训练好的模型 遇到的error问题
作者:weired_cat 发布时间:2022-07-21 11:10:45
这是一个非常愚蠢的错误
debug的时候要好好看error信息
提醒自己切记好好对待error!切记!切记!
-----------------------分割线----------------
pytorch 已经非常友好了 保存模型和加载模型都只需要一条简单的命令
#保存整个网络和参数
torch.save(your_net, 'save_name.pkl')
#加载保存的模型
net = torch.load('save_name.pkl')
因为我比较懒我就想直接把整个网络都保存下来,然后在test文件中直接load一下不就好了?
就遭受了这样的错误。看错了error信息,把‘Net'看成‘net'。报错没有属性‘net'?这个不是我自己写的变量名么?
-----------------瞎捣鼓1h后(呵呵呵)----------------
回头看error,没有属性‘Net',Net???
我当下明白过来,应该是test文件中没有把它import进来,test中就没有任何关于Net的信息。我直接把定义的Net复制进了test.py,就顺利加载了训练好的模型。
但是我也有一个疑问,我理解的把整个模型保存难道不是把它的结构都保存下来了么?为什么还要再把这个网络import一次?来自python、pytorch、面向对象编程三次元小白的疑惑,先存个疑,搞懂了再来回答。
接下来试试只保存网络参数
#只保存网络参数
torch.save(your_net.state_dict(), 'save_name.pkl')
#加载保存的模型
net.load_state_dict(torch.load('save_name.pkl'))
保存网络参数
重新定义网络
报错
想死。。。
仔细看了报错信息,以我小白的理解,我感觉保存下来的可能只是单纯的数据,而不是一个对象(没有方法可以操作),或者该对象没有.copy()方法,所以没有办法进行.copy(),那肯定是保存哪里出错了。然后发现保存部分代码写错了,改成
print一下 net.state_dict和net.state_dict(),前者输出的是网络结构,后者才是网络的参数。
试着回答之前的问题,第二种保存模型的方法只保存了网络的参数(包括卷积层和全连接层每次的weight,bias),所以再加载模型的时候需要先定义网络无可厚非,就像训练时候定义网络那样定义就可以;而第一种保存整个网络的方法,保存了一个网络的实例(包括它的所有结构和参数),net是Net的一个实例,那为什么还要有Class Net的定义呢,还是回答不了。。
那就继续存疑,保持探究精神吧。。
来源:https://blog.csdn.net/weired_cat/article/details/80899102


猜你喜欢
- 以下实例为通过用户输入两个数字,并计算两个数字之和:# -*- coding: UTF-8 -*-# Filename : test.py#
- 第一章:基本的圆角框第二章:透明圆角化背景图片第三章:圆角化图片 第四章:CSS圆角框组件 V1.0在上面的案例中,我只给出最为原始的圆角框
- 实例1:获取星期字符串程序读入一个表示星期几的数字(1~7),输出对应的星期字符串名称。例如,输入 3,返回“星期三&a
- 什么是WaitGroupsWaitGroups是同步你的goroutines的一种有效方式。想象一下,你和你的家人一起驾车旅行。你的父亲在一
- Python的可视化工具有很多,数不胜数,各有优劣。本文就对其中的pylab进行介绍。之所以介绍这一款,是因为它和Matlab的强烈相似度,
- 本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下:本文内容:什么是存储过程存储过程的创建存储过程的使用查看存储过程
- 本文实例讲述了Python访问MySQL封装的常用类。分享给大家供大家参考。具体如下:python访问mysql比较简单,下面整理的就是一个
- 前言提示:这里可以添加本文要记录的大概内容:公司里B2B是通过WinSCP里SFTP与客户进行数据传输,WinSCP是一个Windows环境
- 和设计师打过交道的人一定也见到过少数极品,不是扎着小辫子留着小胡子,就是剃了光头抽根烟,通常说起来一套一套的人作品都很一般般,而作品一般般的
- 1 索引基础1.1 索引作用在MySQL中,查找数据时先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行,假如要运行下面查询语句
- 文件结构html_downloader.py - 下载网页html内容#!/usr/bin/python# -*- coding: UTF-
- Vue.js 使用v-cloak后仍显示变量的解决方法v-cloak 这个指令是防止页面加载时出现 vuejs 的变
- 一、存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用
- 注入漏洞代码和分析<?php function customError($errno, $errstr, $errfile, $err
- 一、什么是vscode** Visual Studio Code (简称 VS Code /
- 一、DataFrame数据准备增、删、改、查的方法有很多很多种,这里只展示出常用的几种。参数inplace默认为False,只能在生成的新数
- 当服务端对http的body进行解析到map[string]interface{}时,会出现cli传递的是int类型,而服务端只能断言成fl
- CentOS7的yum源中默认好像是没有MySQL的。为了解决这个问题,我们要先下载mysql的repo源。1. 下载mysql的repo源
- 在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单
- 基础Redis 库C# 下 Redis-Client 开源的库很多,有 BeetleX.Redis、csredis、Nhiredis、red