头歌平台-深度学习初体验

EduCoder平台:深度学习初体验

第1关:什么是神经网络

在这里插入图片描述

第2关:反向传播

在这里插入图片描述

第3关:动手实现CNN识别手写数字

编程要求:

填写 python 代码,在 Begin-End 段中构建出如下结构的卷积神经网络:

  • 64 个 5*5 的卷积核组成的卷积层,激活函数为 relu;
  • 最大池化层,池化核大小为 2*2;
  • 扁平;
  • 128 个神经元的全连接层,激活函数为 relu;
  • 10 个神经元的全连接层,激活函数为 softmax。

测试说明:

只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 95% 时,视为过关。

代码如下:

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, kernel_size=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 代码,在 Begin-End 段中构建出如下结构的循环神经网络:

  • 有 30 个神经元的 SimpleRNN 层;
  • 有 16 个神经元的全连接层,激活函数为 relu;
  • 有 1 个神经元的全连接层,激活函数为 sigmoid。

测试说明:

只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 70% 时,视为过关。

代码如下:


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(units=16, activation='relu'))
    
    model.add(Dense(units=1, activation='sigmoid'))
    #********* End *********#
    return model

第5关:动手实现猫狗大战

编程要求:

在 Begin-End 段中填写 Python 代码,实现猫狗分类。

测试说明:

补全代码即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 70% 时,视为过关。

代码如下:


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 *********#
    for i, img_name in enumerate(os.listdir(data_path)):
        if 'cat' in img_name:
            onehot[i, 0] = 1
        else:
            onehot[i, 1] = 1
        img = cv2.imread(os.path.join(data_path, img_name))
        img = cv2.resize(img, (IMAGE_HEIGHT, IMAGE_WIDTH))
        img = img / 255.0
        images.append(img)
    #********* End *********#
    return np.array(images), onehot
def build_model():
    '''
    构建模型
    :return:构建好的模型
    '''
    model = keras.Sequential()
    #********* Begin *********#
    model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=[IMAGE_HEIGHT, IMAGE_WIDTH, 3]))
    model.add(MaxPooling2D(pool_size=2))
    model.add(Conv2D(32, kernel_size=3, activation='relu'))
    model.add(MaxPooling2D(pool_size=2))
    model.add(Flatten())
    model.add(Dense(96, activation='relu'))
    model.add(Dense(2, activation='softmax'))
    #********* 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 *********#
    # 编译模型
    model.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(lr=0.0001), metrics=['accuracy'])
    #********* 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


本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>