В этой главе мы предлагаем альтернативный подход, который вместо этого опирается на одну двумерную сверточную нейронную сеть в обеих последовательностях. Каждый слой нашей сети перекодирует исходные токены на основе созданной до сих пор выходной последовательности. Поэтому свойства, подобные вниманию, распространены по всей сети.
Здесь мы сосредоточимся на создании последовательной сети с определенным пулированием из значений, включенных в набор данных . Этот процесс также лучше всего применять в «Модуль распознавания изображений».
Следующие шаги используются для создания модели обработки последовательности с конвенциями с использованием PyTorch —
Шаг 1
Импортируйте необходимые модули для выполнения обработки последовательности с использованием конвентов.
import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D import numpy as np
Шаг 2
Выполните необходимые операции для создания шаблона в соответствующей последовательности, используя следующий код —
batch_size = 128 num_classes = 10 epochs = 12 # input image dimensions img_rows, img_cols = 28, 28 # the data, split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(60000,28,28,1) x_test = x_test.reshape(10000,28,28,1) print('x_train shape:', x_train.shape) print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples') y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes)
Шаг 3
Скомпилируйте модель и поместите шаблон в упомянутую традиционную модель нейронной сети, как показано ниже —
model.compile(loss = keras.losses.categorical_crossentropy, optimizer = keras.optimizers.Adadelta(), metrics = ['accuracy']) model.fit(x_train, y_train, batch_size = batch_size, epochs = epochs, verbose = 1, validation_data = (x_test, y_test)) score = model.evaluate(x_test, y_test, verbose = 0) print('Test loss:', score[0]) print('Test accuracy:', score[1])
Сгенерированный вывод выглядит следующим образом: