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

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

0 голосов
/ 29 июня 2018

Я пытаюсь сделать 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)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...