Keras kullanarak derin öğrenme için verilerin yeniden şekillendirilmesi


10

Keras'a yeni başladım ve kütüphanenin gerçekte nasıl çalıştığını anlamak için MNIST örneğiyle başladım. Keras örnek klasöründeki MNIST sorunun kod snippet'i şu şekilde verilir:

import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten  
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils

batch_size = 128
nb_classes = 10
nb_epoch = 12

# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3

# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
..........

Burada yeniden şekillendirme işlevini anlayamıyorum. Ne yapıyor ve neden uyguladık?

Yanıtlar:


8

mnist.load_data()MNIST basamaklarını yapı ile, (nb_samples, 28, 28)yani 28x28 gri tonlamalı bir görüntüyü temsil eden örnek başına 2 boyut ile besler.

Bununla birlikte, Keras'taki Convolution2D katmanları, örnek başına 3 boyutla çalışacak şekilde tasarlanmıştır. 4 boyutlu giriş ve çıkışları vardır. Bu, renkli görüntüleri kapsar (nb_samples, nb_channels, width, height), ancak daha da önemlisi, her örneğin bir dizi özellik haritası haline geldiği ağın daha derin katmanlarını kapsar (nb_samples, nb_features, width, height).

MNIST basamak girişi için gri tonlamalı görüntü farklı bir CNN katman tasarımına (veya farklı bir şekli kabul etmek için katman oluşturucuya bir param) ihtiyaç duyar veya tasarım basitçe standart bir CNN kullanabilir ve örnekleri açıkça 1 kanal olarak ifade etmelisiniz Görüntüler. Keras ekibi, yeniden şekillenmesi gereken ikinci yaklaşımı seçti.


Kodda kullanılan "np.random.seed (1337)" nin arkasındaki mantığı açıklayabilir misiniz? Neden 1337?
enterML

2
Tekrarlanabilirlik dışında senaryo amaçları için 1337 hakkında özel bir şey yok. Başarılı çalışmanızı başka bir vesileyle tekrarlayabilmeniz için RNG'nizi tohumlamak iyi bir uygulamadır. Sayı bilgisayar korsanları için biraz içeriden şaka - urbandictionary.com/define.php?term=1337
Neil Slater
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.