深度学习初体验

第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.645*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

猜你喜欢

转载自blog.csdn.net/Junds0/article/details/133465323