8. Dropout and Strides For Larger Models
Intro
這是深度學(xué)習(xí)第8課。
本科結(jié)束后,你將會(huì)理解并知道如何使用:
- Stride lengths來(lái)快速建立模型并減少內(nèi)存消耗;
- Dropout 來(lái)對(duì)抗過(guò)擬合;
這兩個(gè)技術(shù)在大型模型中很有用。
Lesson
[1]
from IPython.display import YouTubeVideo YouTubeVideo('fwNLf4t7MR8', width=800, height=450)Sample Code
[2]
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from tensorflow.python import keras from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropoutimg_rows, img_cols = 28, 28 num_classes = 10def data_prep(raw):out_y = keras.utils.to_categorical(raw.label, num_classes)num_images = raw.shape[0]x_as_array = raw.values[:,1:]x_shaped_array = x_as_array.reshape(num_images, img_rows, img_cols, 1)out_x = x_shaped_array / 255return out_x, out_ytrain_size = 30000 train_file = "../input/digit-recognizer/train.csv" raw_data = pd.read_csv(train_file)x, y = data_prep(raw_data)model = Sequential() model.add(Conv2D(30, kernel_size=(3, 3),strides=2,activation='relu',input_shape=(img_rows, img_cols, 1))) model.add(Dropout(0.5)) model.add(Conv2D(30, kernel_size=(3, 3), strides=2, activation='relu')) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(num_classes, activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy,optimizer='adam',metrics=['accuracy']) model.fit(x, y,batch_size=128,epochs=2,validation_split = 0.2) /opt/conda/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.from ._conv import register_converters as _register_convertersTrain on 33600 samples, validate on 8400 samples Epoch 1/2 33600/33600 [==============================] - 14s 408us/step - loss: 0.6243 - acc: 0.8026 - val_loss: 0.2235 - val_acc: 0.9354 Epoch 2/2 33600/33600 [==============================] - 14s 417us/step - loss: 0.2664 - acc: 0.9176 - val_loss: 0.1315 - val_acc: 0.9630<tensorflow.python.keras._impl.keras.callbacks.History at 0x7f58d9f92c88>?
Exercise: Dropout and Strides For Larger Models
Introduction
您已經(jīng)構(gòu)建了一個(gè)模型來(lái)識(shí)別MNIST for Fashion數(shù)據(jù)集中的服裝類型。 現(xiàn)在,您將使模型更大,指定更大的stride lengths并應(yīng)用dropout。 這些更改將使您的模型更快,更準(zhǔn)確。
這是深度學(xué)習(xí)課程的最后一步。
Starter Code
Data Preparation
你需要運(yùn)行以下單元
【3】
import numpy as np from sklearn.model_selection import train_test_split from tensorflow.python import kerasimg_rows, img_cols = 28, 28 num_classes = 10def prep_data(raw, train_size, val_size):y = raw[:, 0]out_y = keras.utils.to_categorical(y, num_classes)x = raw[:,1:]num_images = raw.shape[0]out_x = x.reshape(num_images, img_rows, img_cols, 1)out_x = out_x / 255return out_x, out_yfashion_file = "../input/fashionmnist/fashion-mnist_train.csv" fashion_data = np.loadtxt(fashion_file, skiprows=1, delimiter=',') x, y = prep_data(fashion_data, train_size=50000, val_size=5000)Sample Model Code
[4]
fashion_model = Sequential() fashion_model.add(Conv2D(12, kernel_size=(3, 3), strides=2,activation='relu',input_shape=(img_rows, img_cols, 1))) fashion_model.add(Conv2D(12, (3, 3), strides=2, activation='relu')) fashion_model.add(Flatten()) fashion_model.add(Dense(128, activation='relu')) fashion_model.add(Dense(num_classes, activation='softmax'))fashion_model.compile(loss=keras.losses.categorical_crossentropy,optimizer='adam',metrics=['accuracy'])fashion_model.fit(train_x, train_y,batch_size=batch_size,epochs=epochs,validation_split = 0.2)Adding Strides
指定,編譯和擬合模型,與上面的模型非常相似,但為每個(gè)卷積層指定步長(zhǎng)為2。 調(diào)用你的新模型fashion_model_1。
【5】
from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropoutfashion_model_1 = Sequential() # Specify the rest of the model# Compile fashion_model_1# Fit fashion_model_1Make Model Larger
您應(yīng)該已經(jīng)注意到fashion_model_1訓(xùn)練得非常快。 這樣可以使模型更大。 指定名為fashion_model_2的新模型,該模型與fashion_model_1相同,但以下情況除外:
指定fashion_model_2后,編譯并擬合它。
【6】
# Your code for fashion_model_2 belowAdd Dropout
指定fashion_model_3,它與fashion_model_2相同,只是它在每個(gè)卷積層之后立即添加了丟失(因此它增加了3次丟失)。 編譯并擬合此模型。 將模型在驗(yàn)證數(shù)據(jù)上的性能與之前的模型進(jìn)行比較。
【7】
# Your code for fashion_model_3 belowCongrats
你已經(jīng)完成了深度學(xué)習(xí)課程的第1級(jí)。 您可以使用工具來(lái)創(chuàng)建和調(diào)整計(jì)算機(jī)視覺(jué)模型。 選擇一個(gè)項(xiàng)目并嘗試你的技能。
您可能嘗試的一些有趣的數(shù)據(jù)集包括:
- ???? 書(shū)面信件識(shí)別
- ???? 花卉鑒定
- ???? 貓與狗
- ???? 10只猴子
- ???? 從X射線預(yù)測(cè)骨齡
你學(xué)到了很多東西。 在深度學(xué)習(xí)中還有很多東西需要學(xué)習(xí),但你應(yīng)該對(duì)自己的新技能感到滿意。
Conclusion
練習(xí)結(jié)束后,您已完成深度學(xué)習(xí)課程。 你已經(jīng)可以做一些很棒的事了,當(dāng)我們發(fā)布它時(shí)你就可以開(kāi)始升級(jí)。 2級(jí)將擴(kuò)展您可以做的許多新類型的應(yīng)用程序。
總結(jié)
以上是生活随笔為你收集整理的8. Dropout and Strides For Larger Models的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab中均线交易策略,【每日一策】
- 下一篇: Apollo进阶课程㉘丨Apollo控制