paddlepaddle静态图常用代码记录

模型部分

网络结构

定义数据输入网络层

# 定义两个张量
a = fluid.layers.create_tensor(dtype='int64', name='a')

定义可变维度输入网络层,数据需要之后输入,无需定义张量维度,和初始值。

#定义张量变量x,表示13维的特征值
x = fluid.layers.data(name='x', shape=[13], dtype='float32')

定义了固定张量维度。

x1 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')

定义了固定张量维度,定义初始化值,之后无需赋值即可得到结果。

隐层

hidden = fluid.layers.fc(input=x, size=100, act='relu')

定义一个全连接层,激活函数为"relu",100个神经元。全连接层可以更改张量的维度,在某些需要特殊维度输入的情况下,可以使用全连接层来使数据维度符合条件。

conv1 = fluid.layers.conv2d(input=input,
                                num_filters=32,
                                filter_size=3,
                                stride=1)

定义卷积层,num_filters表示卷积核数量,filter_size表示卷积核大小,stride表示步长。

# 第一个池化层,池化大小为2*2,步长为1,最大池化
pool1 = fluid.layers.pool2d(input=conv1,
                            pool_size=2,
                            pool_stride=1,
                            pool_type='max')

pool_type可选"max"或者"avg","max"对应max-pooling,"avg"对应average-pooling。

x = fluid.layers.dropout(x, dropout_prob=0.5)

随机丢弃

out = fluid.layers.reshape(out, [-1, 25088])

更改张量维度

定义损失函数

cost = fluid.layers.square_error_cost(input=net, label=y)

使用平方差损失函数

fluid.layers.cross_entropy(input=model, label=label)

交叉熵损失函数

训练等操作

main_program = fluid.default_main_program()

创建主程序,将志强定义好的网络结构,构建成完整的程序,并返回主程序接口。

test_program = fluid.default_main_program().clone(for_test=True)

复制主程序,修改模式为test模式,该模式下,将训练才用到的代码,会在测试模式下去除,并且与主程序共用模型参数。

stratprogram = fluid.default_startup_program()

建立初始化程序,为网络层中各个输入预先进行随机数选取并计算一次获得结果,以获得初始化权重

对比一下代码,加强理解:

# 进行参数初始化
exe.run(fluid.default_startup_program())
# 训练一次
train_cost = exe.run(program=fluid.default_main_program(),
                         feed={'x': x_data, 'y': y_data},
                         fetch_list=[avg_cost])

其中,train_cost为fetch_list中输入得变量名的值,及为avg_cost的数值。
feed表示要输入的数据,如网络模型最开始定义的张量,以及label。
如果将这些去除,就跟参数初始化的代码无疑,说明参数初始化程序自带了数据输出部分,输入的是随机数据而已。由于网络参数对于没有返回值,因为只是初始化网络参数。

模型保存于重加载

模型的保存和加载有两种方式,一种是将网络结构和参数一同保存并加载,另一种是只保存模型参数而不保存模型,这样一来,模型要自己重新创建。

保存和加载网络参数

fluid.io.save_persistables(dirname=train_model, main_program=train_program, executor=exe) 

executor是运行的环境,如果是GPU环境,会将数据GPU上数据保存到模型地址。dirname是保存的模型地址,main_program为主程序,里面会保存这一次的梯度和数据。

fluid.io.load_persistables(executor=exe, dirname=save_model_dir, main_program=program)

executor是运行的环境,如果是GPU环境,会将数据从CPU上加载到GPU上。dirname是加载的模型地址,main_program为主程序,里面会加载到上一次的梯度和数据。

网络结构及参数的保存和加载

fluid.io.save_inference_model(save_dirname,
							  feeded_var_names , 
							  target_vars , 
							  executor,
							  model_filename=None,
							  params_filename=None)
feeded_var_names (list[str]) – 字符串列表,包含着Inference Program预测时所需提供数据的所有变量名称(即所有输入变量的名称)。例如:["img"]
target_vars (list[Variable]) – Variable (详见 基础概念 )类型列表,包含着模型的所有输出变量。通过这些输出变量即可得到模型的预测结果。例如:[predict].
executor – 用于保存预测模型的 executor。
main_program (Program,可选) – 通过该参数指定的 main_program 可构建一个专门用于预测的 Inference Program 。 若为None, 则使用全局默认的 _main_program_ 。默认值为None。
model_filename (str,可选) – 保存预测模型结构 Inference Program 的文件名称。若设置为None,则使用 __model__ 作为默认的文件名。
params_filename (str,可选) – 保存预测模型所有相关参数的文件名称。若设置为None,则模型参数被保存在单独的文件中。
export_for_deployment (bool,可选) – 若为True,则 main_program 指定的Program将被修改为只支持直接预测部署的Program。否则,将存储更多的信息,方便优化和再训练。目前只支持设置为True,且默认值为True。
program_only (bool,可选) – 若为True,则只保存预测模型的网络结构,而不保存预测模型的网络参数。默认值为False。
inference_program, feed_target_names, fetch_targets = fluid.io.load_inference_model(dirname=path, executor=exe)
参数
dirname (str) – 待加载模型的存储路径。
executor (Executor) – 运行 Inference Model 的 executor ,详见 执行引擎 。
model_filename (str,可选) – 存储Inference Program结构的文件名称。如果设置为None,则使用 __model__ 作为默认的文件名。默认值为None。
params_filename (str,可选) – 存储所有模型参数的文件名称。当且仅当所有模型参数被保存在一个单独的二进制文件中,它才需要被指定。如果模型参数是存储在各自分离的文件中,设置它的值为None。默认值为None。
pserver_endpoints (list,可选) – 只有在分布式预测时才需要用到。当训练过程中使用分布式查找表(distributed lookup table)时, 预测时需要指定pserver_endpoints的值。它是 pserver endpoints 的列表,默认值为None。

返回
该接口返回一个包含三个元素的列表(program,feed_target_names, fetch_targets)。它们的含义描述如下:
program (Program)– Program (详见 基础概念 )类的实例。此处它被用于预测,因此可被称为Inference Program。
feed_target_names (list)– 字符串列表,包含着Inference Program预测时所需提供数据的所有变量名称(即所有输入变量的名称)。
fetch_targets (list)– Variable (详见 基础概念 )类型列表,包含着模型的所有输出变量。通过这些输出变量即可得到模型的预测结果。
返回类型: 列表(list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值