В Julia Flux я все время получаю ошибку LoadError: Мутация массивов не поддерживается, но я не вижу, где я мутирую массив

Я новичок в Джулии и по какой-то причине не могу заставить работать этот очень простой код. Независимо от того, что я пытаюсь, я получаю ошибку LoadError: Mutating arrays is not supported. Я понимаю, что эта ошибка возникает, когда я изменяю массив во время оптимизации, чтобы код больше не отличался. Я явно недостаточно понимаю Юлию, чтобы понять, где я это делаю.

Если это помогает, похоже, что ошибка возникает в строке for d in dataset.

      using Statistics
using Flux: onehotbatch, onehot, onecold, crossentropy, throttle
using Flux
using Base.Iterators:repeated
using Plots:heatmap
using ImageView:imshow

images = Flux.Data.MNIST.images()[1:10]
labels = Flux.Data.MNIST.labels()[1:10]

heatmap(images[4], color=:grays, aspect_ratio=1)

X = float.(reshape.(images, :))
encode(x) = onehot(x, 0:9)
Y = encode.(labels)

m = Chain(Dense(28^2, 32, relu), Dense(32, 10), softmax)

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

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

dataset = zip(X, Y)

print(size(X))

evalcb = () -> @show(loss(X, Y))

print("Training...")
# Flux.train!(loss, params(m), dataset, opt, cb=throttle(evalcb, 5));
for d in dataset
    print(d[2])
    gs = gradient(params(m)) do
        l = loss(d...)
    end
    update!(opt, params(m), gs)
end

1 ответ

Похоже, у меня была старая версия Flux (но не такая уж старая). Мне пришлось удалить и переустановить Julia, чтобы установить новую версию Flux.

Другие вопросы по тегам