Intro
这是深度学习第8课。
本科结束后,你将会理解并知道如何使用:
- Stride lengths来快速建立模型并减少内存消耗;
- Dropout 来对抗过拟合;
这两个技术在大型模型中很有用。
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, Dropout
img_rows, img_cols = 28, 28
num_classes = 10
def 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 / 255
return out_x, out_y
train_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_converters
Train 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
您已经构建了一个模型来识别MNIST for Fashion数据集中的服装类型。 现在,您将使模型更大,指定更大的stride lengths并应用dropout。 这些更改将使您的模型更快,更准确。
这是深度学习课程的最后一步。
Starter Code
Data Preparation
你需要运行以下单元
【3】
import numpy as np
from sklearn.model_selection import train_test_split
from tensorflow.python import keras
img_rows, img_cols = 28, 28
num_classes = 10
def 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 / 255
return out_x, out_y
fashion_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
指定,编译和拟合模型,与上面的模型非常相似,但为每个卷积层指定步长为2。 调用你的新模型fashion_model_1。
【5】
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropout
fashion_model_1 = Sequential()
# Specify the rest of the model
# Compile fashion_model_1
# Fit fashion_model_1
Make Model Larger
您应该已经注意到fashion_model_1训练得非常快。 这样可以使模型更大。 指定名为fashion_model_2的新模型,该模型与fashion_model_1相同,但以下情况除外:
- 在Flatten图层之前添加一个额外的Conv2D图层。 使它类似于你已经拥有的Conv2D图层,除了不在这个新图层中设置步幅长度(我们已经用现有图层缩小了表示)。
- 将每个卷积层中的过滤器数量更改为24。
指定fashion_model_2后,编译并拟合它。
【6】
# Your code for fashion_model_2 below
Add Dropout
指定fashion_model_3,它与fashion_model_2相同,只是它在每个卷积层之后立即添加了丢失(因此它增加了3次丢失)。 编译并拟合此模型。 将模型在验证数据上的性能与之前的模型进行比较。
【7】
# Your code for fashion_model_3 below
Congrats
你已经完成了深度学习课程的第1级。 您可以使用工具来创建和调整计算机视觉模型。 选择一个项目并尝试你的技能。
您可能尝试的一些有趣的数据集包括:
你学到了很多东西。 在深度学习中还有很多东西需要学习,但你应该对自己的新技能感到满意。
Conclusion
练习结束后,您已完成深度学习课程。 你已经可以做一些很棒的事了,当我们发布它时你就可以开始升级。 2级将扩展您可以做的许多新类型的应用程序。