Định hình lại dữ liệu để học sâu bằng Keras


10

Tôi là người mới bắt đầu với Keras và tôi đã bắt đầu với ví dụ MNIST để hiểu cách thư viện thực sự hoạt động. Đoạn mã của vấn đề MNIST trong thư mục ví dụ Keras được đưa ra là:

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')
..........

Tôi không thể hiểu chức năng định hình lại ở đây. Nó đang làm gì và tại sao chúng ta lại áp dụng nó?

Câu trả lời:


8

mnist.load_data()cung cấp các chữ số MNIST với cấu trúc (nb_samples, 28, 28)tức là có 2 chiều cho mỗi ví dụ đại diện cho hình ảnh thang độ xám 28x28.

Tuy nhiên, các lớp Convolution2D trong Keras, được thiết kế để hoạt động với 3 chiều cho mỗi ví dụ. Họ có đầu vào và đầu ra 4 chiều. Điều này bao gồm các hình ảnh màu (nb_samples, nb_channels, width, height), nhưng quan trọng hơn, nó bao phủ các lớp sâu hơn của mạng, trong đó mỗi ví dụ đã trở thành một tập hợp các bản đồ đặc trưng (nb_samples, nb_features, width, height).

Hình ảnh thang độ xám cho đầu vào chữ số MNIST sẽ cần một thiết kế lớp CNN khác (hoặc một tham số cho trình tạo lớp để chấp nhận một hình dạng khác) hoặc thiết kế có thể chỉ cần sử dụng một CNN tiêu chuẩn và bạn phải thể hiện rõ ràng các ví dụ dưới dạng 1 kênh hình ảnh. Nhóm Keras đã chọn cách tiếp cận thứ hai, cần hình dạng lại.


Bạn có thể giải thích logic đằng sau "np.random.seed (1337)" được sử dụng trong mã không? Tại sao lại là 1337?
enterML

2
Không có gì đặc biệt về 1337 cho các mục đích của kịch bản ngoại trừ độ lặp lại. Đó là một thực hành tốt để gieo hạt giống RNG của bạn để bạn có thể lặp lại công việc thành công của mình chính xác vào một dịp khác. Con số này là một trò đùa bên trong của tin tặc - urbandipedia.com/define.php?term=1337
Neil Slater
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.