我有一个图像数据集(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)
答案 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个样本?