1

我收到此错误:

DimensionMismatch("second dimension of A, 1, does not match length of x, 20")

对于以下代码。我正在尝试在一些样本上训练模型data。我Flux在 Julia 中使用机器学习库。

我检查了我的尺寸,它们对我来说似乎是正确的。问题是什么?

using Flux
using Flux: mse

data = [(i,i) for i in 1:20]
x = [i for i in 1:20]
y = [i for i in 1:20]

m = Chain(
 Dense(1, 10, relu),
 Dense(10, 1),
 softmax)

opt = ADAM(params(m))

loss(x, y) = mse(m(x), y)
evalcb = () -> @show(loss(x, y))
accuracy(x, y) = mean(argmax(m(x)) .== argmax(y))

#this line gives the error
Flux.train!(loss, data, opt,cb = throttle(evalcb, 10))
4

1 回答 1

3

您的第一个密集层有一个大小为 的权重矩阵10x1。您可以按如下方式检查:

m.layers[1].W

因此,您的数据的大小应为 ,1x20以便您可以将其与链中的权重相乘。

x = reshape(x,1,20)
opt = ADAM(params(m))

loss(x, y) = mse(m(x), y)
evalcb = () -> @show(loss(x, y))
accuracy(x, y) = mean(argmax(m(x)) .== argmax(y))

#Now it should work.
Flux.train!(loss, data, opt,cb = Flux.throttle(evalcb, 10))
于 2018-02-22T12:11:10.047 回答