通过简单实践理解机器学习概念(flux.jl)

Flux.jl简介

Flux是什么

Flux 是一个纯 Julia ML 堆栈,可让通过机器学习相关算法构建预测模型。

怎样构建

  • 提供训练和测试数据
  • 构建具有可配置参数的模型以进行预测
  • 通过调整参数来迭代训练模型以改进预测
  • 验证模型

实例

假设一个预测目标: y = x + 1 y = x + 1 y=x+1

using Flux
f(x) = x + 1

f (generic function with 1 method)

获得训练数据与测试数据

x_train = [0 1 2 3 4]
y_train = f.(x_train)

x_test = [5 6 7 8 9]
y_test = f.(x_test)

构建预测模型

model = Dense(1, 1) #构建训练模型

Dense可以视为神经网络,第一个参数为输入量个数第二个参数为输出量个数。所以上面构建的为一个输入量与一个输出量(和预测目标相符)

model.weight #权重

1×1 Matrix{Float32}:
-1.0748355

这是自动初始化的结果

model.bias   #偏量

1-element Vector{Float32}:
0.0

predict = model

这是因为Dense(1, 1)实现了功能σ(Wx+b),例如:

predict(x_train)

1×5 Matrix{Float32}:
1.07484 0.0 -1.07484 -2.14967 -3.22451

相当于是x前面的系数为权重的线性方程。


接下来设置损失函数,使用均方差mse

loss(x,y)= Flux.Losses.mse(predict(x),y)

可以看一下现在的loss

loss(x_train, y_train)

18.064499

接下来设置训练数据与训练参数

data = [(x_train, y_train)]
parameters = params(predict)

Params([Float32[-1.0748355], Float32[0.0]])

此时参数就是权重与偏量

训练

通过train!来训练,训练后查看loss

train!(loss, parameters, data, opt)
loss(x_train, y_train)

1.8237922

好像还不错?再看看测试集的结果怎么样

predict(x_test)

1×5 Matrix{Float32}:
2.09523 2.4653 2.83536 3.20543 3.57549

额,确实不咋地。因为我们期望的结果是y_test,也就是
[5 6 7 8 9],为什么呢?因为才训练了一次而已。多整几次!

改进预测

训练个200次

for i in 1:200
    train!(loss, parameters, data, opt)
    println(loss(x_train, y_train))
end

最后一行结果是:3.9790393e-14,这个loss确实可以

验证

最后看一下参数

parameters

Params([Float32[1.0000001], Float32[0.99999976]])

是不是就是: y = x + 1 y=x+1 y=x+1

看看测试集的结果怎么样

predict(x_test)

1×5 Matrix{Float32}:
5.0 6.0 7.0 8.0 9.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jake484

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

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

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

打赏作者

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

抵扣说明:

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

余额充值