1. 使用paddlepaddle构建3层线性网络

0. 网络结构如图:

1.
该网络有3层:隐藏层1,隐藏层2和输出层,两个隐藏层都有100各节点

现在使用该网络来回归y=2*x+1这样一个函数

1. 定义网络结构

from paddle import fluid  # 使用2.0.0a0 版本的paddlepaddle
import numpy as np

# pp(paddlepaddle)中搭建网络,定义的网络结构、损失函数和优化器等,都会被自动默认加入到主程序(default_main_program),所以当我们定义好网络结构后(定义损失函数和优化器之前),就将仅包含了网络结构的主程序复制一份给infer_program ,用infer_program 来进行模型的推理(因为推理是不需要损失函数和优化器的)
## 网络结构
x = fluid.data(name="x", shape=[None, 1], dtype="float32")  # 输入层不参与计算,仅定义数据
hidden = fluid.layers.fc(input=x, size=100, act="relu")
hidden = fluid.layers.fc(input=hidden, size=100, act="relu")
net = fluid.layers.fc(input=hidden, size=1, act=None)

infer_program = fluid.default_main_program().clone(for_test=True)  # 复制网络,用来进行预测

2. 损失函数

# 损失函数
y=fluid.data(name='y',shape=[None,1],dtype="float32")  # 输入层,虽然是label,也是数据
cost=fluid.layers.square_error_cost(input=net,label=y)  # 计算net变量和y的loss
avg_cost=fluid.layers.mean(cost)	# 计算batch的均值loss

3. 优化器

# 优化器
optimizer=fluid.optimizer.SGDOptimizer(learning_rate=0.01)
opts=optimizer.minimize(avg_cost)  # minize:降低; 贬低; 降低avg_cost的值就是优化?

4. 生成数据

# y=x*2+1
x_data=np.array([[1.0],[2.0],[3.0],[4.0],[5.0]]).astype("float32")
y_data=np.array([[3.0],[5.0],[7.0],[9.0],[11.0]]).astype("float32")

5. 训练

# 创建执行器
place=fluid.CPUPlace()	# 设备描述符,Tensor和模型将被自动分配在该设备上
exe=fluid.Executor(place)           # 传入执行器中
exe.run(fluid.default_startup_program())  # 初始化参数

# 训练
for pass_id in range(100):
    train_cost=exe.run(fluid.default_main_program(),feed={x.name:x_data,y.name:y_data},fetch_list=[avg_cost])
    # x.name是名字为"x"的节点,给该节点喂x_data这个数据
    print("Pass:%d,Cost:%0.5f"%(pass_id,train_cost[0]))

# run(program=None, feed=None, fetch_list=None)
# - program:被执行的Program
# - feed: 该参数表示模型的输入变量。单卡训练feed为dict类型,多卡训练feed可以是dict或者list类型变量
# - fetch_list:该参数表示模型运行之后需要返回的变量
# (个人理解为变量的值,训练时为“avg_cost”意为返回avg_cost的值,下方测试时为"net",意为输出net的值,也就是模型的输出量)

6. 测试

test_data=np.array([[6.0]]).astype("float32")
result=exe.run(infer_program,feed={x.name:test_data},fetch_list=[net])
print(result)

训练截图:
在这里插入图片描述

测试截图(输入=6.0时):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值