Keras深度学习之示例应用

4.1 输入——预测数值模型示例

4.1.1 模型准备

  • 线性回归模型

    w = np.cov(X,Y,bias=1)[0,1]/np.var(X)
    b = np.average(Y) - w * np.average(X)
  • 感应器神经网络模型

    最基本的感应器神经网络模型,只有一个Dense层一个神经元

    model = Sequential()
    model.add(Dense(1,input_dim=1))
  • 多层感应器神经网络模型

    是由两个Dense层构成的神经网络模型。第一层是由64个神经元构成的Dense层,调用便于处理误差反向传播的relu函数作为激活函数;第二层输出层只输出一个预测值,只有一个神经元不需调用激活函数

    model = Sequential()
    model.add(Dense(64,input_dim=1,activation='relu'))
    model.add(Dense(1))
  • 深度多层感应器神经网络模型

    是由三个Dense层构成的神经网络模型。第一、二层是具有64个神经元的Dense层,调用便于处理误差反向传播的relu函数作为激活函数;第三层输出层只输出一个预测值,只有一个神经元不需调用激活函数

    model = Sequential()
    model.add(Dense(64,input_dim=1,activation='relu'))
    model.add(Dense(64,activation='relu'))
    model.add(Dense(1))

4.1.2 训练结果比较

模型训练所需时间排序

感应器神经网络>多层感应器神经网络>深度多层感应器神经网络

4.2 输入数值二元分类模型示例

4.2.1 准备模型

输出层调用sigmoid函数作为激活函数

4.2.2 训练结果比较

模型训练所需时间排序

感应器神经网络>多层感应器神经网络>深度多层感应器神经网络

4.3 输入数值多元分类问题模型示例

4.3.1 准备模型

输出层调用softmax函数作为激活函数

4.3.2 训练结果比较

模型训练所需时间排序

感应器神经网络>多层感应器神经网络>深度多层感应器神经网络

4.4 输入视频预测数值的模型示例

首先,生成简单的用于测试的视频数据集,随后搭建并训练多层感知器神经网络模型和卷积神经网络模型。

由于多层感应器神经网络模型的输入Dense层只接收一维向量数据,因此需要将二维视频转换为一维向量

x_train_1d = x_train.reshape(x_train.shape[0],width*height)
x_val_1d = x_val.reshape(x_val.shape[0],width*height)
x_test_1d = x_test.reshape(x_test.shape[0],width*height)

4.4.1 准备模型

  • 多层感应器神经网络模型

    model = Sequential()
    model.add(Dense(256,activation='relu',input_dim=width*weight))
    model.add(Dense(256,activation='relu'))
    model.add(Dense(256))
    model.add(Dense(1))
  • 卷积神经网络模型

    model = Sequential()
    model.add(Conv2D(32,(3,3),activation='relu',input_shape=(width,height,1)))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Conv2D(32,(3,3),activation='relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Flatten())
    model.add(Dense(256,activation='relu'))
    model.add(Dense(1))

4.4.2 训练结果比较

由于标签值并非形状和颜色等具体的视频特征,而是简单的像素为1的像素个数,所以卷积神经网络模型并没有发挥其性能优势

4.5 输入视频预测二分类问题的模型示例

该模型用于将随机的视频区分为A或B,以及区分正负样本。可用于以下问题:

  • 根据输入的脸部照片识别性别
  • 根据输入的配件照片识别优劣
  • 根据医疗视频判断是否患病

4.5.1 准备模型

  • 多层感知器神经网络模型

    model = Sequential()
    model.add(Dense(256,activation='relu',input_dim=width*weight))
    model.add(Dense(256,activation='relu'))
    model.add(Dense(256,activation='relu'))
    model.add(Dense(1,,activation='sigmoid'))
  • 卷积神经网络模型

    model = Sequential()
    model.add(Conv2D(32,(3,3),activation='relu',input_shape=(width,height,1)))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Conv2D(32,(3,3),activation='relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Flatten())
    model.add(Dense(256,activation='relu'))
    model.add(Dense(1,activation='sigmoid'))
  • 深度卷积神经网络模型

    model = Sequential()
    model.add(Conv2D(32,(3,3),activation='relu',input_shape=(width,height,1)))
    model.add(Conv2D(32,(3,3),activation='relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))
    model.add(Conv2D(64,(3,3),activation='relu'))
    model.add(Conv2D(64,(3,3),activation='relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(256,activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1,activation='sigmoid'))

4.5.2 训练结果比较

多层感知器神经网络模型的训练准确率随着验证损失值的提高出现了过拟合现象

相比于多层感知器神经网络模型,卷积神经网络模型的性能更优

得益于Dropout层,深度卷积神经网络模型没有发生过拟合现象,验证损失值持续下降。

4.6 输入视频预测多元分类问题的模型示例

该模型可以用于以下问题:

  • 区分亚洲人的面部照片
  • 区分显微镜影像中的细菌种类
  • 区分智能手机拍摄的植物种类
  • 区分气象卫星摄像中的台风类型

4.6.1 训练结果比较

多层感知器神经网络模型的训练准确率随着验证损失值的提高出现了过拟合现象

相比于多层感知器神经网络模型,卷积神经网络模型的性能更优

得益于Dropout层,深度卷积神经网络模型没有发生过拟合现象,验证损失值持续下降。

4.7 输入时间序列数据,预测数值的模型示例

4.7.1 准备模型

使用多层感知器神经网络模型、循环神经网络模型、Stateful循环神经网络模型、Stateful叠加循环神经网络模型

  • 多层感知器神经网络模型

    model = Sequential()
    model.add(Dense(32,input_dim=40,activation='relu'))
    model.add(Dropout(0.3))
    for i in range(2):
    model.add(Dense(32,activation='relu'))
    model.add(Dropout(0.3))
    model.add(Dense(1))
  • 循环神经网络模型

    model = Sequential()
    model.add(LSTM(32,input_shape=(None,1)))
    model.add(Dropout(0.3))
    model.add(Dense(1))
  • Stateful循环神经网络模型

    model = Sequential()
    model.add(LSTM(32,batch_input_shape=(1,look_back,1),stateful=True))
    model.add(Dropout(0.3))
    model.add(Dense(1))
  • Stateful叠加循环神经网络模型

    model = Sequential()
    for i in range(2):
    model.add(LSTM(32,batch_input_shape=(1,look_back,1),stateful=True,return_sequences=True))
    model.add(Dropout(0.3))
    model.add(LSTM(32,batch_input_shape=(1,look_back,1),stateful=True))
    model.add(Dropout(0.3))
    model.add(Dense(1))

4.7.2 训练结果比较

  1. 预测结果振幅较小,但周期基本一致

  2. 初期的振幅和周期都一致,但后期结果的振幅和周期都有增大的趋势

  3. 虽然结果呈现余弦曲线趋势,但与同一训练周期及相同单元大小的循环神经网络模型相比,结果并不理想

  4. 振幅和周期趋势都与预测几乎一致最大振幅很接近,但最小振幅预测结果数据略高

4.8 根据输入句子(时间序列数值)预测二元分类问题的模型示例

4.8.1 准备模型

  • 多层感知器神经网络模型

    model = Sequential()
    model.add(Embedding(20000,128,input_length=200))
    model.add(Flatten())
    model.add(Dense(256,activation='relu'))
    model.add(Dense(1,activation='sigmoid'))
  • 循环神经网络模型

    model = Sequential()
    model.add(Embedding(20000,128))
    model.add(LSTM(128))
    model.add(Dense(1,activation='sigmoid'))
  • 卷积神经网络模型

    model = Sequential()
    model.add(Embedding(20000,128,input_length=200))
    model.add(Dropout(0.2))
    model.add(Conv1D(256,3,padding='valid',activation='relu',strides=1))
    model.add(GlobalMaxPooling1D())
    model.add(Dense(128,activation='sigmoid'))
    model.add(Dropout(0.2))
    model.add(Dense(1,activation='sigmoid'))
  • 循环卷积神经网络模型

    model = Sequential()
    model.add(Embedding(20000,128,input_length=200))
    model.add(Dropout(0.2))
    model.add(Conv1D(256,3,padding='valid',activation='relu',strides=1))
    model.add(GlobalMaxPooling1D(pool_size=4))
    model.add(LSTM(128))
    model.add(Dense(1,activation='sigmoid'))

4.8.2 训练结果比较

相比于多层感知器神经网络模型,使用循环层或卷积层的模型性能更高

4.9 输入句子(时间序列数值)预测多元分类问题的模型示例

同4.8.2

sigmoid转换成softmax

你可能感兴趣的:(Keras,深度学习,深度学习,python)