gpt4 book ai didi

machine-learning - 我的简单 Julia-Flux 密集模型中出现奇怪且无信息的错误

转载 作者:行者123 更新时间:2023-11-30 09:14:13 24 4
gpt4 key购买 nike

我的大部分代码都是直接从 Flux 模型动物园存储库复制而来(特别是此示例 https://github.com/FluxML/model-zoo/blob/master/vision/cifar10/cifar10.jl )。

我是新来的,所以我不知道是什么导致了这个错误。我正在使用随机大小的自定义图像数据集。我想将它们分为 30 个类。仅出于测试目的,我将测试和训练大小设置为 20。

using Flux
using Statistics
using Statistics: mean
using Base.Iterators: partition
using BSON
using CSV
using Images

# defining some variables not really important
train_path = "G:\\Book-Cover-Train"
test_path = "G:\\Book-Cover-Test"
train_set = CSV.File("train.csv")
test_set = CSV.File("test.csv")
train_size = 20
test_size = 20
acc = 0


function getarray(path, number)
# code to get image based on the number and convert it to float # not really important to question
file = load(path*"\\img$number.png")
file = imresize(file, 100,100)
X = convert(Array{Float64},channelview(file))
X = permutedims(X, (2,3,1))

individual_image_in_float = X
return individual_image_in_float
end

imgs = [getarray(path_to_training_set, i) for i in 1:train_set_size]
labels = onehotbatch([train_set[i][6] for i in 1:train_set_size],0:29) # every row in training set csv has the 6th column as the label
train = [(cat(imgs[i]..., dims = 4), labels[:,i]) for i in partition(1:train_size, 100)]

@info("Constructing model...")

model = Chain(
Dense(100*100*3, 64, relu),
Dense(64, 30),
softmax)

loss(x, y) = crossentropy(model(x), y)

@info("Beginning training loop...")

for epoch_idx in 1:4
println("epoch number $epoch_idx")
Flux.train!(loss, params(model), train, ADAM())#, cb = evalcb)
end
BSON.@save pwd()*"\\model-final.bson" model)

错误信息是

MethodError: no method matching *(::Array{Float32,2}, ::Array{Float32,4})
Stacktrace:
[1] macro expansion at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0 [inlined]
[2] _pullback(::Zygote.Context, ::typeof(*), ::Array{Float32,2}, ::Array{Float32,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:7
[3] Dense at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\layers\basic.jl:102 [inlined]
[4] _pullback(::Zygote.Context, ::typeof(invoke), ::Dense{typeof(relu),Array{Float32,2},Array{Float32,1}}, ::Type{Tuple{AbstractArray}}, ::Array{Float32,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[5] Dense at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\layers\basic.jl:113 [inlined]
[6] _pullback(::Zygote.Context, ::Dense{typeof(relu),Array{Float32,2},Array{Float32,1}}, ::Array{Float32,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[7] Dense at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\layers\basic.jl:116 [inlined]
[8] _pullback(::Zygote.Context, ::Dense{typeof(relu),Array{Float32,2},Array{Float32,1}}, ::Array{Float64,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[9] applychain at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\layers\basic.jl:30 [inlined]
[10] _pullback(::Zygote.Context, ::typeof(Flux.applychain), ::Tuple{Dense{typeof(relu),Array{Float32,2},Array{Float32,1}},Dense{typeof(identity),Array{Float32,2},Array{Float32,1}},typeof(softmax)}, ::Array{Float64,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[11] Chain at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\layers\basic.jl:32 [inlined]
[12] _pullback(::Zygote.Context, ::Chain{Tuple{Dense{typeof(relu),Array{Float32,2},Array{Float32,1}},Dense{typeof(identity),Array{Float32,2},Array{Float32,1}},typeof(softmax)}}, ::Array{Float64,4}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[13] loss at .\In[57]:45 [inlined]
[14] _pullback(::Zygote.Context, ::typeof(loss), ::Array{Float64,4}, ::Flux.OneHotMatrix{Array{Flux.OneHotVector,1}}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[15] adjoint at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\lib\lib.jl:139 [inlined]
[16] _pullback at C:\Users\Zubu\.julia\packages\ZygoteRules\6nssF\src\adjoint.jl:47 [inlined]
[17] #15 at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\optimise\train.jl:69 [inlined]
[18] _pullback(::Zygote.Context, ::Flux.Optimise.var"#15#21"{typeof(loss),Tuple{Array{Float64,4},Flux.OneHotMatrix{Array{Flux.OneHotVector,1}}}}) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface2.jl:0
[19] pullback(::Function, ::Zygote.Params) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface.jl:96
[20] gradient(::Function, ::Zygote.Params) at C:\Users\Zubu\.julia\packages\Zygote\8dVxG\src\compiler\interface.jl:46
[21] macro expansion at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\optimise\train.jl:68 [inlined]
[22] macro expansion at C:\Users\Zubu\.julia\packages\Juno\oLB1d\src\progress.jl:134 [inlined]
[23] #train!#12(::Flux.Optimise.var"#16#22", ::typeof(Flux.Optimise.train!), ::Function, ::Zygote.Params, ::Array{Tuple{Array{Float64,4},Flux.OneHotMatrix{Array{Flux.OneHotVector,1}}},1}, ::ADAM) at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\optimise\train.jl:66
[24] train!(::Function, ::Zygote.Params, ::Array{Tuple{Array{Float64,4},Flux.OneHotMatrix{Array{Flux.OneHotVector,1}}},1}, ::ADAM) at C:\Users\Zubu\.julia\packages\Flux\oX9Pi\src\optimise\train.jl:64
[25] top-level scope at .\In[57]:68 # which is the line containing train!

最佳答案

您在堆栈跟踪中看到的实际错误来自于您尝试将两个数组相乘时。

julia> a = [1,2,3]
3-element Array{Int64,1}:
1
2
3

julia> b = [2,3,4]
3-element Array{Int64,1}:
2
3
4

julia> a * b
ERROR: MethodError: no method matching *(::Array{Int64,1}, ::Array{Int64,1})
Closest candidates are:

将两个数组的内容相乘的正确方法是:

julia> a .* b
3-element Array{Int64,1}:
2
6
12

关于machine-learning - 我的简单 Julia-Flux 密集模型中出现奇怪且无信息的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59344708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com