Neural network Julia中使用MXNet的神经网络示例

Neural network Julia中使用MXNet的神经网络示例,neural-network,julia,mxnet,Neural Network,Julia,Mxnet,我正在尝试建立一个神经网络来解决异或问题。我的代码如下: using MXNet using Distributions using PyPlot xor_data = zeros(4,2) xor_data[1:0] = 1 xor_data[1:1] = 1 xor_data[2:0] = 1 xor_data[2:1] = 0 xor_data[3:0] = 0 xor_data[3:1] = 1 xor_data[4:0] = 0 xor_data[4:1] = 0 xor_labe

我正在尝试建立一个神经网络来解决异或问题。我的代码如下:

using MXNet
using Distributions
using PyPlot

xor_data = zeros(4,2)
xor_data[1:0] = 1
xor_data[1:1] = 1
xor_data[2:0] = 1
xor_data[2:1] = 0
xor_data[3:0] = 0
xor_data[3:1] = 1
xor_data[4:0] = 0
xor_data[4:1] = 0

xor_labels = zeros(4)
xor_labels[1] = 0
xor_labels[2] = 1
xor_labels[3] = 1
xor_labels[4] = 0

batchsize = 4
trainprovider = mx.ArrayDataProvider(:data => xor_data, batch_size=batchsize, shuffle=true, :label => xor_labels)
evalprovider = mx.ArrayDataProvider(:data => xor_data, batch_size=batchsize, shuffle=true, :label => xor_labels)

data = mx.Variable(:data)
label = mx.Variable(:label)
net = @mx.chain     mx.Variable(:data) =>
                    mx.FullyConnected(num_hidden=2) =>
                    mx.Activation(act_type=:relu) =>
                    mx.FullyConnected(num_hidden=2) =>
                    mx.Activation(act_type=:relu) =>
                    mx.FullyConnected(num_hidden=1) =>
                    mx.Activation(act_type=:relu) =>

model = mx.FeedForward(net, context=mx.cpu())
optimizer = mx.SGD(lr=0.01, momentum=0.9, weight_decay=0.00001)
initializer = mx.NormalInitializer(0.0,0.1)
eval_metric = mx.MSE()

mx.fit(model, optimizer, initializer, eval_metric, trainprovider, eval_data = evalprovider, n_epoch = 100)
mx.fit(model, optimizer, eval_metric, trainprovider, eval_data = evalprovider, n_epoch = 100)
但我得到了以下错误:

LoadError:AssertionError:标签中的样本数不匹配 有数据 在#ArrayDataProvider#6428(::Int64)第22行开始的表达式中, ::Bool,::Int64,::Int64,::Type{T},::Pair{Symbol,Array{Float64,2}, ::io.jl:324 in处的对{Symbol,数组{Float64,1}}) (::Core.#kw#Type)(::数组{Any,1},::Type{MXNet.mx.ArrayDataProvider}, ::对{Symbol,数组{Float64,2}},::对{Symbol,数组{Float64,1})位于 加载时包含字符串(::字符串,::字符串)中的:0。jl:441 在sys.dylib:的include_字符串(::字符串,::字符串)中?在里面 将_字符串(::模块,::字符串,::字符串)包含在eval.jl:32 in处 (::Atom.##59#62{String,String})在eval.jl:81英寸 在utils.jl:30 in处使用路径(::Atom.#59#62{String,String},::String) withpath(::函数,::字符串)在eval.jl:46处,在 eval.jl:79[inlined]in(::Atom.##58#61{Dict{String,Any}})at 任务.jl:60


我希望将值(0或1)馈送到网络并获取单个值。是我的错误吗?

xor\U数据的维度是错误的,它应该有4列,而不是4行(顺便说一句,你没有像你想象的那样初始化它,因为Julia中的数组是从1而不是从0索引的)

看:

julia> xor_data = [ [1. 1]; [0 1]; [1 0]; [0 0] ]
4×2 Array{Float64,2}:
 1.0  1.0
 0.0  1.0
 1.0  0.0
 0.0  0.0

julia> xor_labels
4-element Array{Float64,1}:
 0.0
 1.0
 1.0
 0.0

julia> mx.ArrayDataProvider(:data => xor_data, :labels => xor_labels)
ERROR: AssertionError: Number of samples in  labels is mismatch with data
 in #ArrayDataProvider#6428(::Int64, ::Bool, ::Int64, ::Int64, ::Type{T}, ::Pair{Symbol,Array{Float64,2}}, ::Pair{Symbol,Array{Float64,1}}) at /Users/alexey/.julia/v0.5/MXNet/src/io.jl:324
 in MXNet.mx.ArrayDataProvider(::Pair{Symbol,Array{Float64,2}}, ::Pair{Symbol,Array{Float64,1}}) at /Users/alexey/.julia/v0.5/MXNet/src/io.jl:280

julia> xor_data = [ [1. 0 1 0]; [1 1 0 0] ]
2×4 Array{Float64,2}:
 1.0  0.0  1.0  0.0
 1.0  1.0  0.0  0.0

julia> mx.ArrayDataProvider(:data => xor_data, :labels => xor_labels)
MXNet.mx.ArrayDataProvider(Array{Float32,N}[
Float32[1.0 0.0 1.0 0.0; 1.0 1.0 0.0 0.0]],Symbol[:data],Array{Float32,N}[
Float32[0.0 1.0 1.0 0.0]],Symbol[:labels],4,4,false,0.0f0,0.0f0,MXNet.mx.NDArray[mx.NDArray{Float32}(2,4)],MXNet.mx.NDArray[mx.NDArray{Float32}(4,)])