Некоторое время в прошлом;

Я решил спроектировать, разработать, протестировать и поэкспериментировать со сверточной нейронной сетью. При проектировании и настройке сетей я узнал несколько вещей и наблюдал за поведением характеристик сетей, относящихся к тому, как они, поведение, ведут себя, когда они, сети, начинают приближаться к своему, сети, месту отдыха (например, как настроить такие вещи, как поскольку скорость обучения или импульс формируют подход сети к решению). Я знаю, что 92% правильных ответов — это немного по сравнению с тем, как большинство современных подходов работают с MNIST, но уникальный подход дал уникальный результат, и я сделал все это полностью с нуля.

Я разработал сверточную сеть (или «сеть»), которая правильно фокусируется на изображениях 28x28 пикселей² рукописных цифр 0–9, как определено как 60 000 обучающих изображений рукописного набора данных MNIST, с последующим тестированием на 10 000 новых экземпляров. Архитектура открыла первый конверсионный уровень с ядрами 6x6 с шагом 2, затем увидела ядра 2x2 с шагом 1, а затем с шагом 1 в ядрах 3x3 и 5x5 соответственно. *** Они вовсе не были сплющены и не были переданы в сеть принятия решений. В результате получится 1x1xZ, где Z — количество признаков. Результаты считываются непосредственно из тепла.

(L1) 6x6 s2 (L2) 2x2 s1 (L3) 3x3 s1 (L4) 5x5 s1

Далее следует использование и концептуальная форма моей сети.

Я написал это на java. Java очень помогает, когда дело доходит до доступных сред обучения и использования таких механизмов, как TensorFlow или PyTorch. Я бы добавил здесь ссылку, но я лично не пробовал ни один из них (кроме замечательного взаимодействия с чьим-то диспетчером DataFrame, который я использовал для управления файлами .csv, что может быть полезно для импорта данных реального мира), поскольку я полу -Свободный программист и задался вопросом, смогу ли я сделать это сам. Я сразу потерпел неудачу, и мне пришлось использовать чужую работу для перевода файла IDX, полученного путем простого поиска в Google MNIST и посещения первого результата (на момент написания) в буквальные изображения .png в моей рабочей области. Тем не менее, оттуда я успешно реализовал многопоточный метод преобразования файла изображения в объект изображения, отправил векторы размера ядра, размерности и длины шага (как жестко закодированные в настоящее время) в мое собственное замечательное создание сети для построения с различными активаций слоев (не возлагайте здесь большие надежды: я становлюсь ленивым, когда становлюсь старше), заполните сеть и начните обучение, прежде чем, наконец, запустить ее через набор тестов для окончательной оценки. Этот процесс выглядит следующим образом (кто-нибудь, пожалуйста, помогите мне встроить код в этот редактор):

public static final void main(final String[] args) {

List‹Image› trainImages = new LinkedList‹›();
List‹Image› testImages = new LinkedList‹›() ;

try (final Stream‹Path› paths = Files.walk(Paths.get("G:/Users/me//NetBeansProjects/ImgNet/imgRepo/MNIST/Train/"))) {
trainImages = paths.parallel().filter(Files::isRegularFile)
.map(Image::new).collect(Collectors.toList());
} catch(final IOException e) {
System.out.println(e.getMessage());
System.exit(0);
}

try (конечный поток‹Path › paths = Files.walk(Paths.get("G:/Users/me//NetBeansProjects/ImgNet/imgRepo/MNIST/Test/"))) {
testImages = paths.parallel().filter(Files ::isRegularFile)
.map(Image::new).collect(Collectors.toList());
} catch(final IOException e) {
System.out.println(e. getMessage());
System.exit(0);
}

final Dimension[] layerDims
= new Dimension[]
{new Dimension (6,6),//-›12< br /> новое измерение(2,2),//-›11
новое измерение(3,3),//-›9
новое измерение(5,5),//-›5
new Dimension(5,5)};//-›1

final int[] depths = new int[]{6,7,22,87,10};
final int[] strides = new int[]{2,1,1,1,1};

final ImgNet network = new ImgNet(
layerDims,depths,strides,trainImages .get(0).channels()
);

network.seed();

train(network, trainImages);
test( сеть, тестовые изображения);

}

Сама сеть — это то, чем я горжусь, поскольку она успешно выполнила две задачи. Один, различающий эти две фотографии:

Во-вторых, отличные результаты в наборе данных MNIST.

Я, по общему признанию, не зашел так далеко, но учтите, что это была старая концепция с архитектурной точки зрения, и, хотя она очень продуманно оптимизирована, она уступает своей собственной природе в том, что в противном случае полуразумные нарушения начальных весов действительно приведут к бродячей диссоциации для эпох ( проблема, по общему признанию, решена), и она должна быть адаптирована для каждого использования. Помимо проблем с инициализацией веса, он предназначен для работы на многоядерном процессоре, а не на графическом процессоре (этот процессор не может компенсировать время умножения матрицы быстрого преобразования Фурье, выполняемого на графическом процессоре, и вместо этого лучше всего подходит для частного использования. один терпит время) и не использует какую-либо адаптивную скорость обучения, включая импульс. Кроме того, он не использует какие-либо объединяющие слои или специализированные свертки, такие как расширенные свертки или им подобные.

МОЯ СОБСТВЕННАЯ «СЕТЬ»:

То, что следует ниже, является личным усилием, и я не могу обещать, что оно будет работать так же, как ваша стандартная сверточная нейронная сеть Vanilla, но оно ведет себя как единое целое и проходит все модульные и, по крайней мере, кажущиеся все функциональные тесты на сегодняшний день.

***Поскольку у меня были проблемы с поднятием некоторых из моих сетей с помощью ReLU (простите меня) в качестве функции активации в прошлом, я скептически относился к тому, чтобы не придерживаться моего старого доброго надежного TanH (ибо я согрешил ) в сочетании с горячим смешиванием тщательно подобранных весов. Таким образом, это, казалось бы, навязанное самому себе препятствие уничтожило любую мою идею создания сети из обычно рекомендуемых сокращений 3x3 (покажите мне любую ссылку на сверточные сети, и я покажу вам их пример свертки 3x3, отрицатели получают бесплатные файлы cookie), из-за тот факт, что это также приведет к слишком «глубокой» сети, чтобы действительно выжать всю полезность TanH

Я задаюсь вопросом, должен ли я опубликовать это, чтобы сделать перерыв на кофе…