英文:
Error training using Flux.train! in Julia
问题
### 问题
我有以下的代码,试图在Julia中训练一个神经网络,但是每当我尝试使用Flux.train!时就会出错。
using Flux, CSV, DataFrames, Random, Statistics, Plots
加载数据
data = CSV.read("daily_stock_returns.csv")
将数据分割为训练集和测试集
train_data = data[1:800, :]
test_data = data[801:end, :]
定义输入和输出变量
inputs = Matrix(train_data[:, 2:end])
outputs = Matrix(train_data[:, 1])
定义神经网络结构
n_inputs = size(inputs, 2)
n_hidden = 10
n_outputs = 1
model = Chain(
Dense(n_inputs, n_hidden, relu),
Dense(n_hidden, n_outputs)
)
定义损失函数
loss(x, y) = Flux.mse(model(x), y)
定义优化器
optimizer = ADAM()
训练模型
n_epochs = 100
for epoch in 1:n_epochs
Flux.train!(loss, params(model), [(inputs, outputs)], optimizer)
end
测试模型
test_inputs = Matrix(test_data[:, 2:end])
test_outputs = Matrix(test_data[:, 1])
predictions = Flux.predict(model, test_inputs)
test_loss = Flux.mse(predictions, test_outputs)
打印测试损失
println("测试损失: $test_loss")
### 错误
当我运行这段代码时:
训练模型
n_epochs = 100
for epoch in 1:n_epochs
Flux.train!(loss, params(model), [(inputs, outputs)], optimizer)
end
我得到了下面的错误。
UndefVarError: params not defined
Stacktrace:
1 top-level scope
@ .\In[16]:4
[2] eval
@ .\boot.jl:368 [inlined]
[3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base .\loading.jl:1428
我尝试过卸载并重新安装,但没有改善。如何修复这个错误?
英文:
Problem
I have the below code trying to train a neural network in Julia but I am getting an error whenever I try using Flux.train!
using Flux, CSV, DataFrames, Random, Statistics, Plots
# Load the data
data = CSV.read("daily_stock_returns.csv")
# Split the data into training and testing sets
train_data = data[1:800, :]
test_data = data[801:end, :]
# Define the input and output variables
inputs = Matrix(train_data[:, 2:end])
outputs = Matrix(train_data[:, 1])
# Define the neural network architecture
n_inputs = size(inputs, 2)
n_hidden = 10
n_outputs = 1
model = Chain(
Dense(n_inputs, n_hidden, relu),
Dense(n_hidden, n_outputs)
)
# Define the loss function
loss(x, y) = Flux.mse(model(x), y)
# Define the optimizer
optimizer = ADAM()
# Train the model
n_epochs = 100
for epoch in 1:n_epochs
Flux.train!(loss, params(model), [(inputs, outputs)], optimizer)
end
# Test the model
test_inputs = Matrix(test_data[:, 2:end])
test_outputs = Matrix(test_data[:, 1])
predictions = Flux.predict(model, test_inputs)
test_loss = Flux.mse(predictions, test_outputs)
# Print the test loss
println("Test loss: $test_loss")
Error
When I run this cell of code:
# Train the model
n_epochs = 100
for epoch in 1:n_epochs
Flux.train!(loss, params(model), [(inputs, outputs)], optimizer)
end
I get the below error.
UndefVarError: params not defined
Stacktrace:
[1] top-level scope
@ .\In[16]:4
[2] eval
@ .\boot.jl:368 [inlined]
[3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
@ Base .\loading.jl:1428
I have tried uninstalling and installing with no improvement. How do I fix this error?
答案1
得分: 1
这是因为 Fux.params
(参见文档) 默认未导出。你可以将 params
替换为 Flux.params
(通常在文档中是这样做的,据我记得),或者将 using Flux
替换为 using Flux: params
(第二个选项可能不太理想,因为它会向你的命名空间中添加一个非常通用的名称)。
英文:
It's because Fux.params
(see the docs) isn't exported by default. You either replace params
by Flux.params
(which is how it's often done in the docs, as far as I recall), or replace using Flux
by using Flux: params
(the second option being probably less ideal because it adds a name that is really generic to your namespace).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论