第1关:什么是神经网络
任务描述
本关任务:根据本节课所学知识完成本关所设置的选择题。
相关知识
为了完成本关任务,你需要掌握:
什么是神经网络;
神经网络与深度学习的关系。
第1题
A
第2题
A
第3题
A
第4题
C
第2关:反向传播
任务描述
本关任务:根据本节课所学知识完成本关所设置的选择题。
相关知识
为了完成本关任务,你需要掌握:
前向传播;
反向传播。
前向传播
根据上一关的知识我们已经知道了神经网络就是搭积木,积木搭高了就是深度学习了。那么我们来看看神经网络是怎样工作的。
神经网络和其他机器学习算法一样,同样有训练和预测的过程。如果用一句话来概括的话就是预测过程为前向传播的过程,训练过程为重复前向传播加反向传播的过程。所以理解前向传播和反向传播至关重要,我们接下来先看看前向传播。
为了简便,假设有一个非常简单的神经网络,其中黄色方块表示输入层的数据,圆圈表示神经元,连线表示参数 W ,棕色小方块表示参数 b ,圆圈的左半部分表示线性计算部分的结果,右半部分表示使用 ReLU 函数激活后的结果
第1题
A
第2题
A
第3题
B
第3关:动手实现CNN识别手写数字
任务描述
本关任务:编写 Python 代码动手搭建 CNN 模型实现手写数字识别。
相关知识
为了完成本关任务,你需要掌握:
1 . 认识数据;
2 . 什么是卷积神经网络;
3 . 如何使用 Keras 构建卷积神经网络。
认识数据
本关要做的事情是训练一个卷积神经网络来识别 MNIST 数据集种的数字。 MNIST 数据库是由 Yann 提供的手写数字数据库文件。
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense
import numpy as np
# 设置随机种子
np.random.seed(1447)
def build_model():
'''
在Begin-End段中构建出如下结构的卷积神经网络
1.64个5*5的卷积核组成的卷积层,激活函数为relu
2.最大池化层,池化核大小为2*2
3.扁平
4.128个神经元的全连接层,激活函数为relu
5.10个神经元的全连接层,激活函数为softmax
:return: 构建好的模型
'''
model = Sequential()
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=[28, 28, 1]))
#********* Begin *********#
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
#********* End *********#
return model
第4关:动手实现RNN分析影评情感
任务描述
本关任务:编写 Python 代码动手搭建 RNN 模型实现影评情感分析。
相关知识
为了完成本关任务,你需要掌握:
1 . 认识数据;
2 . 什么是循环神经网络;
3 . 如何使用 Keras 构建循环神经网络。
认识数据
IMDB 数据集包含来自互联网的 50000 条的电影评论,该数据被分为用于训练的 25000 条评论和用于测试的 25000 条评论,训练集和测试集都包含 50% 的正面评价和 50% 的负面评价。该数据集已经经过预处理:评论(单词序列)已经被转换为整数序列,其中每个整数代表字典中的某个单词
from keras.models import Sequential
from keras.layers import Embedding, SimpleRNN, Dense
def build_model():
'''
在Begin-End段中构建如下结构的循环神经网络
1.有30个神经元的SimpleRNN层
2.有16个神经元的全连接层,激活函数为relu
3.有1个神经元的全连接层,激活函数为sigmoid
:return: 构建好的模型
'''
model = Sequential()
model.add(Embedding(1000, 64))
#********* Begin *********#
model.add(SimpleRNN(30))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
#********* End *********#
return model
第5关:动手实现猫狗大战
任务描述
本关任务:编写 Python 代码实现猫狗识别。
相关知识
为了完成本关任务,你需要掌握:
1 . 数据简介;
2 . 数据的读取与预处理;
3 . 实现猫狗分类。
from keras.layers import Dense, Activation, Flatten, Dropout, Conv2D, MaxPooling2D
import keras
import os
import numpy as np
import cv2
# 设置随机种子
np.random.seed(1447)
IMAGE_HEIGHT = 128
IMAGE_WIDTH = 128
def get_train_data(data_path):
'''
读取并处理数据
:return:处理好的图像和对应的one-hot编码
'''
images = []
onehot = np.zeros((500, 2))
#********* Begin *********#
#********* End *********#
return np.array(images), onehot
def build_model():
'''
构建模型
:return:构建好的模型
'''
model = keras.Sequential()
#********* Begin *********#
#********* End *********#
return model
def fit_and_predict(model, train_images, onehot, test_images):
'''
训练模型,并对测试图像进行预测
:param model: 训练好的模型
:param train_images: 训练集图像
:param onehot: 训练集的one-hot编码
:param test_images: 测试集图像
:return: 预测结果
'''
#********* Begin *********#
# 编译模型
#********* End *********#
model.fit(train_images, onehot, epochs=20, batch_size=32, verbose=0)
result = model.predict(test_images, batch_size=10)
predict_idx = np.argmax(result, axis=1)
return predict_idx