用字典初始化参数:
用字典初始化参数,命名两个字典,一个是参数字典,一个是超参数字典,用logger.info输出
定义字典
Python 字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。如图 1 所示。
字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”。
创建字典
由于字典中每个元素都包含两部分,分别是键(key)和值(value),因此在创建字典时,键和值之间使用冒号:
分隔,相邻元素之间使用逗号,
分隔,所有元素放在大括号{ }
中。
使用{ }
创建字典的语法格式如下:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
param = dict()
param['datadir'] = datadir
param['dataname'] = dataname
param['device'] = device
param['bidirect'] = bidirect
param['seed'] = seed
获取字典
keys()、values() 和 items() 这三个方法都可以用来获取字典中的特定数据:
- keys() 方法用于返回字典中的所有键(key);
- values() 方法用于返回字典中所有键对应的值(value);
- items() 用于返回字典中所有的键值对(key-value)。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
for k, v in d.items():
logger.info(f'{k}:{v}')
注意
当字典中有一个键值对的value为none时,输出要特殊对待
param['seed'] = None
不然打印时会报错
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
for k, v in d.items():
if (v != None):
logger.info(f'{k}:{v}')
关于none
在 Python 中,有一个特殊的常量 None(N 必须大写)。和 False 不同,它不表示 0,也不表示空字符串,而表示没有值,也就是空值。
这里的空值并不代表空对象,即 None 和 []、“” 不同:
>>> None is []
False
>>> None is ""
False
None 有自己的数据类型,我们可以在 IDLE 中使用 type() 函数查看它的类型,执行代码如下:
>>> type(None)
<class 'NoneType'>
可以看到,它属于 NoneType 类型。
需要注意的是,None 是 NoneType 数据类型的唯一值(其他编程语言可能称这个值为 null、nil 或 undefined),也就是说,我们不能再创建其它 NoneType 类型的变量,但是可以将 None 赋值给任何变量。如果希望变量中存储的东西不与任何其它值混淆,就可以使用 None。
模型的保存和读取
模型的保存
保存方式二仅保存模型参数,将模型的参数保存成字典的形式。
模型的读取
读取方式二,load_state_dict()以字典的形式读取模型的参数,这种情况要重新定义模型
在测试集上准确率最高的模型在测试集上也将会是准确率最高的吗?
验证集怎么使用?
遇到了一个问题,打印tensor的某一维时候要用中括号,不能用小括号,总感觉遇到过这个问题。。。。
a=torch.rand(2,3)
print(a[0])
遇到问题:'_IncompatibleKeys' object has no attribute 'train'
model=model.load_state_dict(beat_model)
不对,应改正为
model.load_state_dict(beat_model)