使用Julia Flux构建简单的神经网络

时间:2019-03-16 15:12:56

标签: neural-network julia

我有一个图像数据集(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))

我不知道函数在做什么,它们采用什么参数,它们返回什么,而且我在互联网上找不到任何文档。我只能找到例子。 因此,我有两个问题:如何使它适用于我的数据集?并且是否有关于Sluxarn等Flux函数的文档? (例如:https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

2 个答案:

答案 0 :(得分:0)

您可以提供独立的MWE吗?我认为您的X_training的维度不是3*100*100 x,实际上是2688。

您的第一层是Dense(input, 32, relu),输入是3*100*100,因此期望输入中的一个维度是3*100*100,而您不满意。

答案 1 :(得分:0)

也许尝试替换

dataset = zip(X_training,Y_training)

使用

{{1}}

zip实际上将X的训练数据1与Y的数据1配对,因此将向量的元组转换为元组的向量。我想您的训练数据有2688个样本?