Ошибка измерения

Я пытаюсь сделать CNN с помощью флюса в Юлии. Однако я получаю следующую ошибку.

LoadError: [91mDimensionMismatch("")[39m
while loading untitled-65dcf75c74c0859bdf206a333b2e1081, in expression starting on line 165
#conv2d!#48(::Tuple{Int64,Int64}, ::Tuple{Int64,Int64}, ::Int64, ::Int64, ::Float64, ::Function, ::Array{Float64,4}, ::Array{Float64,4}, ::Array{Float64,4}) at conv.jl:264
(::NNlib.#kw##conv2d!)(::Array{Any,1}, ::NNlib.#conv2d!, ::Array{Float64,4}, ::Array{Float64,4}, ::Array{Float64,4}) at <missing>:0
(::NNlib.#kw##conv!)(::Array{Any,1}, ::NNlib.#conv!, ::Array{Float64,4}, ::Array{Float64,4}, ::Array{Float64,4}) at <missing>:0
#conv#58(::Tuple{Int64,Int64}, ::Tuple{Int64,Int64}, ::Int64, ::Function, ::Array{Float64,4}, ::Array{Float64,4}) at conv.jl:29
(::NNlib.#kw##conv)(::Array{Any,1}, ::NNlib.#conv, ::Array{Float64,4}, ::Array{Float64,4}) at <missing>:0
track(::Flux.Tracker.Call{Flux.Tracker.#_conv,Tuple{Array{Float64,4},TrackedArray{…,Array{Float64,4}},Tuple{Int64,Int64},Tuple{Int64,Int64}}}) at Tracker.jl:41
#conv#31(::Tuple{Int64,Int64}, ::Tuple{Int64,Int64}, ::Function, ::Array{Float64,4}, ::TrackedArray{…,Array{Float64,4}}) at array.jl:321
(::NNlib.#kw##conv)(::Array{Any,1}, ::NNlib.#conv, ::Array{Float64,4}, ::TrackedArray{…,Array{Float64,4}}) at <missing>:0
(::Flux.Conv{2,NNlib.#relu,TrackedArray{…,Array{Float64,4}},TrackedArray{…,Array{Float64,1}}})(::Array{Float64,4}) at conv.jl:39
mapfoldl_impl(::Base.#identity, ::Flux.##81#82, ::Array{Float64,4}, ::Array{Any,1}, ::Int64) at reduce.jl:43
(::Flux.Chain)(::Array{Float64,4}) at basic.jl:31
loss(::Array{Float64,4}, ::Array{Any,1}) at untitled-65dcf75c74c0859bdf206a333b2e1081:150
macro expansion at train.jl:39 [inlined]
macro expansion at progress.jl:107 [inlined]
#train!#146(::Flux.Optimise.##147#149, ::Function, ::Function, ::Array{Any,1}, ::Flux.Optimise.##80#84) at train.jl:38
macro expansion at train.jl:65 [inlined]
macro expansion at progress.jl:107 [inlined]
anonymous at <missing>:?
include_string(::String, ::String) at loading.jl:522
include_string(::Module, ::String, ::String) at Compat.jl:88
(::Atom.##112#116{String,String})() at eval.jl:109
withpath(::Atom.##112#116{String,String}, ::Void) at utils.jl:30
withpath(::Function, ::String) at eval.jl:38
hideprompt(::Atom.##111#115{String,String}) at repl.jl:67
macro expansion at eval.jl:106 [inlined]

(::Atom.##110#114{Dict{String,Any}})() at task.jl:80

Модель, которую я делаю, выглядит следующим образом:

s=train_data(ran)
s1=zeros(1501,10,10,10)
x_tdata=[]
y_tdata=[]
for i in 1:1501 push!(x_tdata,s[i][1]) end
for i in 1:1501 push!(y_tdata,s[i][2]) end
for i in 1:1501
 for j in 1:10
  s1[i,j,:,:]=x_tdata[i][j][:][:]
  end
  end
xx= permutedims(s1, [2, 3,4, 1])

using Flux
using Flux: mse
using Flux: @epochs

model = Chain(
    Conv((2,2), 1=>32, relu),
    x -> maxpool(x, (2,2)),
    Conv((2,2), 32=>64, relu),
    x -> maxpool(x, (2,2)),
    Conv((2,2), 64=>128, relu),
    x -> maxpool(x, (2,2)),
    Conv((2,2), 128=>128, relu),
    x -> maxpool(x, (2,2)),
    x -> reshape(x, :, size(x, 4)),
    Dense(288, 10))

loss(x, y) = mse(model(x), y)
opt = ADAM(params(model))
using Base.Iterators: partition

trainData = []
for batch in partition(1:1500, 50)
    trainXFloat = Float64.(xx[:, :,:, batch])

    trainY = y_tdata[batch]
    push!(trainData, (trainXFloat, trainY))
end
#@show params(model)
@epochs 100 Flux.train!(loss, trainData, opt)

Я считаю, что проблема может заключаться в расчете входных данных плотного слоя. Может кто-нибудь, пожалуйста, помогите мне понять, как рассчитать это. Если вы думаете иначе, то дайте мне знать, где может произойти ошибка.

Спасибо за вашу помощь!

0 ответов

Другие вопросы по тегам