首页 > 其他 > 详细

tf.keras.Sequential搭建深度神经网络

时间:2020-03-20 11:29:59      阅读:203      评论:0      收藏:0      [点我收藏+]

所谓深度神经网络就是层次比较多的神经网络,我们搭建深度神经网络的过程就是多次添加网络层次的过程,与搭建回归模型和预测模型的过程一样。

下面就看一下使用tf.keras.Sequential构建深度神经网络模型的完整过程:

 1 # 第一步:包导入
 2 import numpy as np
 3 import pandas as pd
 4 import matplotlib as mpl
 5 import matplotlib.pyplot as plt
 6 import sklearn
 7 import tensorflow as tf
 8 import tensorflow.keras as keras
 9 
10 import os
11 import sys
12 import time
13 
14 for module in np, pd, mpl, sklearn, tf, keras:
15     print (module.__name__, module.__version__)
16 # 第二步:数据加载
17 from sklearn.datasets import fetch_california_housing
18 housing = fetch_california_housing(data_home=C:/Users/rencm/scikit_learn_data,
19                                    download_if_missing=True)
20 # 第三步:切分数据集和验证集
21 from sklearn.model_selection import train_test_split
22 x_train_all, x_test, y_train_all, y_test = train_test_split(housing.data, housing.target, random_state = 7)
23 x_train, x_valid, y_train, y_valid = train_test_split(x_train_all, y_train_all, random_state = 11)
24 print (x_train.shape, x_valid.shape, x_test.shape)
25 # 第四步:输入归一化
26 from sklearn.preprocessing import StandardScaler
27 scaler = StandardScaler()
28 x_train_scaled = scaler.fit_transform(x_train)
29 x_valid_scaled = scaler.transform(x_valid)
30 x_test_scaled = scaler.transform(x_test)
31 # 第五步:构建模型(这里构建隐藏层深度为20的深度神经网络模型)
32 model = keras.models.Sequential()
33 model.add(keras.layers.Input(shape = x_train.shape[1:]))
34 for _ in range(20):
35     model.add(keras.layers.Dense(30, activation = relu))
36 model.add(keras.layers.Dense(1))
37 
38 print (model.summary())
39 
40 model.compile(
41     loss = mean_squared_error,
42     optimizer = sgd
43 )
44 # 第六步:训练模型
45 history = model.fit(
46     x_train_scaled, y_train,
47     validation_data=(x_valid_scaled, y_valid),
48     epochs=100,
49     callbacks=[
50         keras.callbacks.EarlyStopping(min_delta = 1e-2, patience=5)
51     ]
52 )
53 # 第七步:评测模型
54 model.evaluate(x_test_scaled, x_test)

模型的构建是我们已经非常熟悉的一个过程,所以上面我们没有仔细的讲解,我们所要强调是在深度神经网络模型的构建过程中以下几个可以优化的方面:

一:批归一化处理

概念:所谓的批归一化就是对所有的中间层次的结果都进行归一化的处理。

作用:可以有效的抑制梯度消失的问题。(梯度消失即损失函数关于靠前层次的导数越来越小,就可能导致前面层次的训练不充分。导致梯度消失问题出现的原因主要有两个。一是参数初始化问题,二是不合适的激活函数。批归一化处理可以使损失函数关于某一参数的导数尽可能均匀的分布,那么就不会出现关于某一参数的导数过小,从而有效的抑制梯度消失问题)

常用归一化处理的方式:

  • min-max归一化:x = (x-min)/(max - min)
  • z-score归一化:x = (x-u)/std
 1 # 第五步:构建模型(这里构建隐藏层深度为20的深度神经网络模型)
 2 model = keras.models.Sequential()
 3 model.add(keras.layers.Input(shape = x_train.shape[1:]))
 4 for _ in range(20):
 5     model.add(keras.layers.Dense(30, activation = relu)) 7     model.add(keras.layers.BatchNormalization())#对上一层的输出进行归一化处理
 8     """10     在归一化处理的时候,抑制存在一个争议,应该在激活之后归一化,还是应该在激活在前归一化,下面给出在激活之前归一化的方式:
11     model.add(keras.layers.Dense(30))13     model.add(keras.layers.BatchNormalization())
14     model.add(keras.layers.Activation(‘relu‘))
15     """
16 model.add(keras.layers.Dense(1))
17 
18 print (model.summary())
19 
20 model.compile(
21     loss = mean_squared_error,
22     optimizer = sgd
23 )

二:激活函数的重要性

首先介绍几个比较常用的激活函数:

  • sigmoid:1/(1+e^(-x))
  • relu:max(0,x)
  • tanh:tanh(x)
  • leaky relu:max(0.1x, x)
  • maxout
  • elu

这里我们测试一下selu激活函数,这个激活函数的特殊点是自带批归一化处理,而且运行的速度较快:

 1 # 第五步:构建模型(这里构建隐藏层深度为20的深度神经网络模型)
 2 model = keras.models.Sequential()
 3 model.add(keras.layers.Input(shape = x_train.shape[1:]))
 4 for _ in range(20):
 5     model.add(keras.layers.Dense(30, activation = selu))
 6 model.add(keras.layers.Dense(1))
 7 
 8 print (model.summary())
 9 
10 model.compile(
11     loss = mean_squared_error,
12     optimizer = sgd
13 )

三:dropout

概念:在模型训练的每一轮次,随机的选择若干个神经元,使其不再发生作用,即抛弃神经元。

作用:可以有效抑制过拟合。(dropout可以防止模型过分的依赖于某一个或几个神经元,从而有效的抑制过拟合现象的发生)

 1 # 第五步:构建模型(这里构建隐藏层深度为20的深度神经网络模型)
 2 model = keras.models.Sequential()
 3 model.add(keras.layers.Input(shape = x_train.shape[1:]))
 4 for _ in range(20):
 5     model.add(keras.layers.Dense(30, activation = selu))
 6 model.add(keras.layers.Dropout(0.5))
 7 # 在批归一化处理的时候,我们一般不会对所以的层次都进行归一化处理,影响程序运行效率,我们只对某几层进行归一化处理。
 8 model.add(keras.layers.Dense(1))
 9 
10 print (model.summary())
11 
12 model.compile(
13     loss = mean_squared_error,
14     optimizer = sgd
15 )

 

tf.keras.Sequential搭建深度神经网络

原文:https://www.cnblogs.com/renxiansheng/p/12530132.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!