函数介绍 (1)argparse (2)append (3)entend (4)model.train (5)model.eval(6)pickle.dump (7)pickle.load

- [ ] argparse
- [ ] append() 和 entend()
- [ ] model.train() 和 model.eval()
- [ ] pickle.dump() 和 pickle.load()



一、argparse

1、定义:argparse是python标准库里面用来处理命令行参数的库
2、代码:
import argparse							# 首先导入模块
parser = argparse.ArgumentParser()   	# 创建一个 ArgumentParser 对象,ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息
parser.add_argument()    				# 给ArgumentParser对象添加新的命令行参数,参数的类型和相应的处理方法由不同的参数决定。
args = parser.parse_args()    			# 进行解析参数
3、详细介绍 — ArgumentParser 对象
parser = argparse.ArgumentParser(prog=None, 			# 程序的名称(默认:sys.argv[0])
		                        usage=None, 			# 程序使用说明
		                        description=None, 		# 在help 之前显示的文本
		                        epilog=None, 			# 在help 之后显示的文本
		                        parents=[], 			# 一个 ArgumentParser 对象的列表
		                        formatter_class=argparse.HelpFormatter, 	# 自定义帮助信息的格式
		                        prefix_chars='-', 		# 可选参数的前缀字符集合,默认是‘-’
		                        fromfile_prefix_chars=None, # 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合
		                        argument_default=None, 	# 参数的全局默认值
		                        conflict_handler='error', 	# 定义两个add_argument中添加的选项名字发生冲突时怎么处理,默认处理是抛出异常
		                        add_help=True, 			# 是否增加-h/--help选项,默认是True)
		                        allow_abbrev=True		# 如果缩写是无歧义的,则允许缩写长选项 
		                        )
4、详细介绍 — add_argument() 方法
parser.add_argument(name or flags   # 必选参数名或者可选参数标识符
                    action          # 表示值赋予键的方式
                    nargs           # 指定这个参数后面的value有多少个,默认为1
                    const           # 被一些 action 和 nargs 选择所需求的常数。
                    default         # 必选参数和可选的参数的默认值
                    type            # 指定命令行参数数据类型
                    choices         # 说明命令行参数的取值范围,它的值一般是一个列表
                    required        # 说明参数是否必须进行输入,只支持可选参数
                    help            # 说明信息
                    metavar         # 在使用方法消息中使用的参数值示例。
                    dest            # 相当于把位置参数或者选项参数关联到一个特定的名字
)

二、append() 和 entend()

1、append()函数:得到的是数组中嵌套数组的形式

append(object) :将一个对象作为一个整体添加到列表中,添加后的列表比原列表多一个元素,该函数的参数可以是任何类型的对象,该函数没有返回值。

2、entend()函数:将两个数组的原素进行拼接

extend(iterable) :将一个可迭代对象中的每个元素逐个地添加到列表中,可迭代对象中有几个元素,添加后的列表就比原列表多几个元素,该函数的参数必须是可迭代的对象,该函数没有返回值。

  • 示例代码:
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
a.append(b)
c.extend(b)
print(a)
print(c)
  • 输出结果:
[1, 2, 3, [4, 5, 6]]
[7, 8, 9, 4, 5, 6]

Process finished with exit code 0
注意:字符串没有这两个函数
  • 示例代码:
a = 'do'
b = 're'
a.extend(b)
print(a)
  • 输出结果:
AttributeError: 'str' object has no attribute 'extend'

Process finished with exit code 1

三、model.train() 和 model.eval()

1、model.train()

  启用 BatchNormalization 和 Dropout。

2、model.eval()

  不启用 BatchNormalization 和 Dropout。训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有batch normalization层所带来的的性质。

 train_loss = []
        total_predictions = []
        total_labels = []
        for idx, data in enumerate(trainGenerator):                 # enumerate 是为了施加索引
            data_, label = Variable(data[0]), Variable(data[1])     # 图片 -- 图片的信息(标签)
            prob = model(data_)                                     # 对图片进行处理,生成预测值

            prob_ = np.argmax(prob.detach().cpu(), -1)              # 取出概率最大值所对应的索引
            loss = criterion(prob, label)                           # 计算误差(预测值,标签)
            train_loss.append(loss.item()*len(label.cpu()))         # 误差记录
            loss.backward()                                         # 开始反向传播,计算所有梯度值
            optimizer.step()                                        # 将参数更新值施加到 net 的 parameters 上,优化梯度
            total_predictions.extend(prob_)
            total_labels.extend(label.cpu())
            print('Iter: [{}/{}]\t Epoch: [{}/{}]\t Loss: {}\t Acc: {}'.format(idx+1, len(trainGenerator), epoch+1, opt.epochs,
                                                                    loss.item(),
                                                                    metrics.accuracy_score(label.cpu(), prob_)))

        # 当整个一轮结束后,将loss值 以及 accuracy值 计算后放入文件中
        loss_epoch = sum(train_loss)/len(traindata)
        totalTrain_loss.append(loss_epoch)
        with open(path_t, 'a') as f:
            f.write('Epoch: {}\t Loss: {}\t Accuracy: {}\n'.format(epoch+1, loss_epoch,
                                                         metrics.accuracy_score(total_labels,total_predictions)))
        # 不启用 BatchNormalization 和 Dropout
        model.eval()

四、pickle.dump() 和 pickle.load()

1、pickle.dump()
pickle.dump(obj, file, [,protocol])

1)将对象obj保存到文件file中去;
2)protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;

2、pickle.load()
pickle.load(file)

从file中读取一个字符串,并将它重构为原来的python对象。file:类文件对象,有read()和readline()接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值