Как добавить и использовать MNIST в Julia 1.6.6?

Код отличной книги Мохаммада Наумана показывает это (для Джулии 1.5.3):

using Flux, Statistics 
using Flux.Data.MNIST
using Flux: onehotbatch

Что не работает под Julai 1.6.6 с

UndefVarError: MNIST not defined

Stacktrace:
 [1] eval
   @ ./boot.jl:360 [inlined]
 [2] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
   @ Base ./loading.jl:1116

Поэтому я пытаюсь

] add MNIST

который дает

The following package names could not be resolved:
 * MNIST (not found in project, manifest or registry)

Если я попытаюсь

using MNIST

это дает

ArgumentError: Package MNIST not found in current path:
- Run `import Pkg; Pkg.add("MNIST")` to install the MNIST package.

Если я затем попробую рекомендуемый

import Pkg; Pkg.add("MNIST")

это дает

The following package names could not be resolved:
 * MNIST (not found in project, manifest or registry)

Код автора тоже выдает такую ​​же ошибку под 1.6.6.

Как я могу использовать MNIST под Джулией 1.6.6?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Набор данных MNIST доступен из Пакет MLDatasets.jl.

Много информации доступно в документации пакета: МНИСТ.

]add MLDatasets
using MLDatasets

# load training set
train_x, train_y = MNIST.traindata()

# load test set
test_x,  test_y  = MNIST.testdata()

Чтобы расширить вышесказанное и добавить некоторую справочную информацию. У меня нет книги, поэтому я не могу точно проверить, какая версия Flux используется, но это какая-то версия до v0.12.0, когда наборы данных были удалены (см. коммит b78cd76) в пользу MLDatasets (соответствующий PR). Конечно, наличие другой версии Julia не мешает вам установить более старую версию Flux. Я бы не рекомендовал выбирать более старую версию Flux, если это единственная проблема, с которой вы сталкиваетесь. В современных руководствах будут использоваться MLDatasets, и сообщество Julia в целом склонно концентрироваться на одном пакете для определенной цели.

Чтобы пояснить приведенный выше пример:

где вы раньше делали:

train_x = MNIST.images(:train)
train_y = MNIST.labels(:train)

test_x = MNIST.images(:train)
test_y = MNIST.labels(:train)

вместо этого вы должны использовать приведенный выше код. Метки идентичны в двух случаях:

julia> train_x, train_y = MLDatasets.MNIST.traindata();

julia> Data.MNIST.labels(:train) == train_y
true

Однако Flux.Data.MNIST.images(:train) возвращает Vector изображений (матрицы 28x28 с eltypeGray{N0f8}), а MLDatasets возвращает (более или менее) трехмерный тензор (28x28x60000). Чтобы получить данные, идентичные данным в Flux.Data.MNIST, нам нужно разделить матрицы тензора, превратить их в изображения (элементы Gray) и транспонировать.

julia> using ImageCore
julia> map(transpose, eachslice(Gray.(train_x); dims=3)) == Data.MNIST.images(:train)
true

Если вы решите, что предпочитаете использовать более старую версию Flux, вы можете попробовать v0.12.2 - v0.12.10. Они совместимы с вашей версией Julia и «до сих пор» имеют Flux.Data.MNIST (наборы данных были добавлены обратно, но помечены как устаревшие):

pkg> add Flux#v0.12.10

Должно быть, они также полностью изменили API. MNIST.images() больше не существует.

Dean Schulze 05.05.2022 05:55

Полный пример находится здесь: sylvaticus.github.io/SPMLJ/stable/04_-NN-Нейронные_сети/040‌​2-_Implementation_of‌​_neural_networks_wor‌​kflows.html#Convolut‌​ional-neural-network‌​s

Antonello 05.05.2022 07:46

Единственные вызовы API, которые у вас есть, это .traindata и .testdata. Мне нужен пример использования readimageheader и readimages.

Dean Schulze 06.05.2022 05:08

@DeanSchulze Я добавил некоторую информацию к ответу. Если вам нужно что-то очень конкретное, возможно, вы могли бы написать новый вопрос с дополнительной информацией. Как я написал в ответе, у меня нет доступа к книге, поэтому я не могу найти пример.

ahnlabb 06.05.2022 09:03

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