1. Dropout là gì, nó tất cả ý nghĩa gì trong mạng neural network

Theo Wikipedia, thuật ngữ “dropout” đề cùa đến bài toán làm lơ các đơn vị (unit) (cả nhị hidden unit với visible unit) vào mạng neural network.quý khách vẫn xem: Drop out là gì

Hiểu đơn giản dễ dàng là, vào mạng neural network, chuyên môn dropout là bài toán chúng ta đang bỏ qua một vài ba unit nhìn trong suốt quy trình train vào mô hình, phần nhiều unit bị bỏ qua mất được chọn lọc thốt nhiên. Tại phía trên, bọn họ hiểu “bỏ qua mất - ignoring” là unit đó sẽ không còn tsi gia cùng góp sức vào quá trình đào tạo (lan truyền tiến với lan truyền ngược).

Bạn đang xem: Dropout là gì

Về mặt nghệ thuật, tại từng quy trình đào tạo và huấn luyện, từng node tất cả Phần Trăm bị bỏ qua là 1-p với phần trăm được chọn là p

2. Tạo sao họ đề xuất dropout

Giả sử rằng chúng ta đọc trọn vẹn mọi gì đã nói ở trong phần 1, thắc mắc đề ra là tại sao bọn họ phải cho dropout, tại sao chúng ta rất cần phải loại trừ một vài các unit làm sao đó trong mạng neural network?

Câu vấn đáp mang đến thắc mắc này là nhằm phòng over-fitting

khi họ thực hiện full connected layer, những neural sẽ dựa vào “mạnh” cho nhau nhìn trong suốt quy trình giảng dạy, điều đó có tác dụng bớt sức mạng cho mỗi neural và dẫn mang lại bị over-fitting tập train.

3. Dropout

Đọc mang đến trên đây, bạn đã có một tư tưởng cơ bản về dropout cùng đụng lực - bộ động cơ nhằm họ sử dụng nó. Nếu chúng ta chỉ ý muốn có cái nhìn tổng quan liêu về dropout vào neural network, nhị sections bên trên đã hỗ trợ vừa đủ đọc tin cho chính mình, bạn có thể dừng trên phía trên. Phần tiếp sau, bọn họ vẫn nói kỹ rộng về phương diện nghệ thuật của dropout.

Trước trên đây, vào machine learning, người ta thường xuyên sử dụng regularization nhằm nức chế chặn over-fititng. Regularization làm sút over-fitting bằng cách thêm nguyên tố “phạt” vào hàm độ lỗi (loss function). Bằng vấn đề cấp dưỡng điểm phạt này, quy mô được đào tạo và huấn luyện sẽ giúp đỡ những features weights giảm xuống sự dựa vào lẫn nhau. Đối cùng với hầu hết ai đó đã sử dụng Logistic Regression rồi thì đang không xa lạ cùng với thuật ngữ pphân tử L1(Laplacian) cùng L2 (Gaussian).

Dropout là 1 trong nghệ thuật không giống, một giải pháp tiếp cận không giống để regularization vào mạng neural netwoks.

Kỹ thuật dropout được tiến hành nlỗi sau:

Trong trộn train: với từng hidden layer, cùng với mỗi trainning sample, với những lần lặp, chọn ngẫu nhiên p phần trăm số node và bỏ lỡ nó (bỏ lỡ luôn hàm kích hoạt cho các node bị quăng quật qua).

Trong pha test: Sử dụng toàn cục activations, tuy thế bớt chúng với xác suất p (vày chúng ta bị miss p% hàm activation vào quy trình train).


*

Mô tả về phong cách thiết kế mạng có cùng không có dropout

4. Một số Đặc điểm đúc kết được Lúc đào tạo và giảng dạy nhiều mô hình khác biệt áp dụng dropout

Dropout đòi hỏi cần gấp rất nhiều lần quá trình huấn luyện và giảng dạy nhằm đạt được sự hội tụ. Tuy nhiên, thời gian giảng dạy cho từng epoch đang ít hơn.

Xem thêm: Facebook Khóa Tài Khoản Không Dùng Tên Thật, Cách Khôi Phục Lại Tài Khoản Facebook Bị Khóa

Với H unit trong mô hình, từng unit đều phải có xác xuất bị bỏ qua hoặc được lựa chọn, bọn họ sẽ có được 2^H mô hình có thể bao gồm. Trong pha test, toàn cục network được thực hiện với mỗi hàm activation được sụt giảm với hệ số p.

5. Thực nghiệm trong keras

Những vấn đề nhắc tới ở bên trên chỉ với triết lý. Bây giờ chúng ta sẽ hợp tác vào có tác dụng thực tế. Để coi thử dropout hoạt động như thế nào, bọn họ sẽ xây dựng mô hình deep net sử dụng keras và thực hiện tập tài liệu cifar-10. Mô hình họ kiến tạo bao gồm 3 hidden layer với size thứu tự là 64, 128, 256 và 1 full connected layer gồm size 512 với output layer bao gồm size 10 (vị bản thân có 10 lớp).

Chúng ta sử dụng hàm kích hoạt là ReLU bên trên các hidden layer và sử dụng hàm sigmoid bên trên output layer. Sử dụng hàm lỗi categorical cross-entropy.

Trong trường hợp mô hình bao gồm sử dụng dropout, bọn họ đã set dropout làm việc tất cả các layer với chuyển đổi xác suất dropout ở trong vòng trường đoản cú 0.0 mang lại 0.9 với bước nhảy là 0.1.

Mô hình cài đặt với số epochs là 20. Bắt đầu coi làm sao.

Thứ nhất, bọn họ sẽ load một vài thư viện bắt buộc thiết

import numpy as npimport osimport kerasfrom keras.datasets import cifar10from keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Convolution2D, MaxPooling2Dfrom keras.optimizers import SGDfrom keras.utils import np_utilsfrom keras.preprocessing.image import ImageDataGeneratorimport matplotlib.pyplot as pltfrom pylab import rcParamsrcParams = 20, 20from keras.datasets import cifar10(X_train, y_train), (X_test, y_test) = cifar10.load_data()print("Training data:")print("Number of examples: ", X_train.shape)print("Number of channels:",X_train.shape) print("Image size:",X_train.shape, X_train.shape, X_train.shape)print("Test data:")print("Number of examples:", X_chạy thử.shape)print("Number of channels:", X_kiểm tra.shape)print("Image size:",X_chạy thử.shape, X_chạy thử.shape, X_demo.shape)Kết quả

Training data:Number of examples: 50000Number of channels: 3Image size: 32 32 3Test data:Number of examples: 10000Number of channels: 3Image size: 32 32 3Chúng ta tất cả 50000 hình train, và 10000 hình demo. Mỗi hình là 1 trong những ảnh RGB có size 33x32x3 px.


*

dataset cifar 10

Tiếp theo, chúng ta đang chuẩn chỉnh hoá dữ liệu. Đây là 1 trong bước quan trọng đặc biệt trước khi huấn luyện và giảng dạy mô hình

# In:Specify Training ParametersbatchSize = 512 #-- Training Batch Sizenum_classes = 10 #-- Number of classes in CIFAR-10 datasetnum_epochs = 100 #-- Number of epochs for training learningRate= 0.001 #-- Learning rate for the networklr_weight_decay = 0.95 #-- Learning weight decay. Reduce the learn rate by 0.95 after epochimg_rows, img_cols = 32, 32 #-- đầu vào image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_demo = np_utils.to_categorical(y_kiểm tra, num_classes)batchSize = 512 #-- Training Batch Sizenum_classes = 10 #-- Number of classes in CIFAR-10 datasetnum_epochs = 100 #-- Number of epochs for training learningRate= 0.001 #-- Learning rate for the networklr_weight_decay = 0.95 #-- Learning weight decay. Reduce the learn rate by 0.95 after epochimg_rows, img_cols = 32, 32 #-- input image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_chạy thử = np_utils.to_categorical(y_chạy thử, num_classes)# In:VGGnet-10from keras.layers import Conv2Dimport copyresult = y = loss = acc = dropouts = for dropout in dropouts: print("Dropout: ", (dropout)) Model = Sequential() #-- layer 1 mã sản phẩm.add(Conv2D(64, (3, 3), border_mode="valid", input_shape=( img_rows, img_cols,3))) Model.add(Dropout(dropout)) model.add(Conv2D(64, (3, 3))) Mã Sản Phẩm.add(Dropout(dropout)) Mã Sản Phẩm.add(Activation("relu")) Mã Sản Phẩm.add(MaxPooling2D(pool_size=(2, 2))) ##--layer 2 Mã Sản Phẩm.add(Conv2D(128, (3, 3))) Model.add(Dropout(dropout)) Mã Sản Phẩm.add(Activation("relu")) model.add(MaxPooling2D(pool_size=(2, 2))) ##--layer 3 model.add(Conv2D(256, (3, 3))) Model.add(Dropout(dropout)) model.add(Activation("relu")) Mã Sản Phẩm.add(MaxPooling2D(pool_size=(2, 2))) ##-- layer 4 Mã Sản Phẩm.add(Flatten()) model.add(Dense(512)) model.add(Activation("relu")) #-- layer 5 Mã Sản Phẩm.add(Dense(num_classes)) #-- loss model.add(Activation("softmax")) sgd = SGD(lr=learningRate, decay = lr_weight_decay) Mã Sản Phẩm.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=) model_cce = Mã Sản Phẩm.fit(X_train, Y_train, batch_size=batchSize, epochs=trăng tròn, verbose=1, shuffle=True, validation_data=(X_thử nghiệm, Y_test)) score = mã sản phẩm.evaluate(X_test, Y_thử nghiệm, verbose=0) y = model.predict(X_test) print("Test score:", score) print("Test accuracy:", score) result = copy.deepcopy(model_cce.history) loss.append(score) acc.append(score)# In: plot dropout import numpy as np import matplotlib.pyplot as pltwidth = 0.1plt.bar(dropouts, acc, width, align="center")plt.tick_params(axis="both", which="major", labelsize=35)plt.tick_params(axis="both", which="minor", labelsize=35)plt.ylabel("Accuracy",kích thước = 30)plt.xlabel("Dropout", kích thước = 30)plt.show()# In: plot non drop outimport numpy as np import matplotlib.pyplot as pltwidth = 0.1plt.bar(dropouts, loss, width, align="center",color = "green")plt.tick_params(axis="both", which="major", labelsize=35)plt.tick_params(axis="both", which="minor", labelsize=35)plt.ylabel("Loss",kích thước = 30)plt.xlabel("Dropout", kích thước = 30)plt.show()

*

Kết quả

Nhìn hình tác dụng ngơi nghỉ trên, chúng ta bao gồm một vài Tóm lại nhỏ dại như sau:

Giá trị dropout cực tốt là 0.2, khoảng chừng dropout mang lại giá trị đồng ý được là bên trong đoạn từ 0 cho 0.5. Nếu dropout to hơn 0.5 thì kết quả hàm đào tạo và huấn luyện trả về khá tệ.

Giá trị độ đúng đắn còn khá phải chăng => trăng tròn epochs là không đầy đủ, bắt buộc đào tạo nhiều hơn thế nữa.