Julia: 通过简单实践理解机器学习概念(flux.jl)
通过简单实践理解机器学习概念(flux.jl)jake484于 2021-09-17 10:48:37 发布 104文章标签: 神经网络 机器学习版权Flux.jl简介Flux是什么Flux 是一个纯 Julia ML 堆栈,可让通过机器学习相关算法构建预测模型。怎样构建提供训练和测试数据构建具有可配置参数的模型以进行预测通过调整参数来迭代训练模型以改进预测验证模型实例假设一个预测目标: y =
通过简单实践理解机器学习概念(flux.jl)
jake484
于 2021-09-17 10:48:37 发布 104
文章标签: 神经网络 机器学习
版权
Flux.jl简介
Flux是什么
Flux 是一个纯 Julia ML 堆栈,可让通过机器学习相关算法构建预测模型。
怎样构建
提供训练和测试数据
构建具有可配置参数的模型以进行预测
通过调整参数来迭代训练模型以改进预测
验证模型
实例
假设一个预测目标: y = x + 1 y = x + 1 y=x+1
using Flux
f(x) = x + 1
1
2
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)
1
2
3
4
5
构建预测模型
model = Dense(1, 1) #构建训练模型
1
Dense可以视为神经网络,第一个参数为输入量个数,第二个参数为输出量个数。所以上面构建的为一个输入量与一个输出量(和预测目标相符)
model.weight #权重
1
1×1 Matrix{Float32}:
-1.0748355
这是自动初始化的结果
model.bias #偏量
1
1-element Vector{Float32}:
0.0
predict = model
1
这是因为Dense(1, 1)实现了功能σ(Wx+b),例如:
predict(x_train)
1
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)
1
可以看一下现在的loss
loss(x_train, y_train)
1
18.064499
接下来设置训练数据与训练参数
data = [(x_train, y_train)]
parameters = params(predict)
1
2
Params([Float32[-1.0748355], Float32[0.0]])
此时参数就是权重与偏量
训练
通过train!来训练,训练后查看loss
train!(loss, parameters, data, opt)
loss(x_train, y_train)
1
2
1.8237922
好像还不错?再看看测试集的结果怎么样
predict(x_test)
1
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
1
2
3
4
最后一行结果是:3.9790393e-14,这个loss确实可以
验证
最后看一下参数
parameters
1
Params([Float32[1.0000001], Float32[0.99999976]])
是不是就是: y = x + 1 y=x+1 y=x+1
看看测试集的结果怎么样
predict(x_test)
1
1×5 Matrix{Float32}:
5.0 6.0 7.0 8.0 9.0
————————————————
版权声明:本文为CSDN博主「jake484」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jake484/article/details/120344229
更多推荐
所有评论(0)