Использование Julia Flux для построения простой нейронной сети - PullRequest
1 голос
/ 16 марта 2019

У меня есть набор данных изображений (https://www.kaggle.com/iarunava/cell-images-for-detecting-malaria),), и я хочу использовать нейронную сеть, чтобы узнать, является ли одно изображение незараженной ячейкой или нет. Поэтому я упорядочил свои данные, чтобы получить 4 переменные:

X_tests, Y_tests, X_training, Y_training

Каждая из этих переменных имеет тип Array{Array{Float64,1},1}

И у меня есть функция для построения простой нейронной сети (которая взята из примера https://smist08.wordpress.com/2018/09/24/julia-flux-for-machine-learning/):

function simple_nn(X_tests, Y_tests, X_training, Y_training)
    input = 100*100*3
    hl1 = 32
    m = Chain(
      Dense(input, 32, relu),
      Dense(32, 2),
      softmax) |> gpu

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

    accuracy(x, y) = mean(onecold(m(x)) .== onecold(y))

    dataset = [(X_training,Y_training)]
    evalcb = () -> @show(loss(X_training, Y_training))
    opt = ADAM(params(m))

    Flux.train!(loss, dataset, opt, cb = throttle(evalcb, 10))

    println("acc X,Y ", accuracy(X_training, Y_training))

    println("acc tX, tY ", accuracy(X_tests, Y_tests))
end

И я получаю эту ошибку после выполнения simple_nn(X_tests, Y_tests, X_training, Y_training):

ERROR: DimensionMismatch("matrix A has dimensions (32,30000), vector B has length 2668")
...

Ошибка в этой строке: Flux.train!(loss, dataset, opt, cb = throttle(evalcb, 10))

Я не знаю, что делают функции, какой аргумент они принимают, что возвращают, и я не могу найти какую-либо документацию в Интернете. Я могу только найти примеры. Итак, у меня есть два вопроса: как я могу сделать эту работу для моего набора данных? И есть ли документация для функций Flux, как для sklearn? (например, так: https://scikit -learn.org / stable / modules / generate / sklearn.svm.SVC.html )

1 Ответ

0 голосов
/ 21 марта 2019

Можете ли вы предоставить автономный MWE?Я думаю, что ваша X_training не имеет размерности 3*100*100 x, а на самом деле она равна 2688.

Ваш первый слой - Dense(input, 32, relu), а вход - 3*100*100, поэтому ожидается, что вход, где одно из измерений - 3*100*100, не удовлетворяет вас.

...