深度神经网络——神经网络简介

激活函数

向神经网络中引入非线性因素,通过激活函数,神经网络就可以拟合各种曲线。如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合

Sigmoid/logistics函数

在这里插入图片描述

tf.nn.sigoid

tanh(双曲正切曲线)

相比sigmoid,其以0为中心
在这里插入图片描述

tf.nn.tanh

RELU

在这里插入图片描述

tf.nn.relu

LeakyReLu

缓解relu的“神经元死亡”
在这里插入图片描述

tf.nn.leaky_relu

SoftMax

用于多分类过程中,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来
在这里插入图片描述
在这里插入图片描述

tf.nn.softmax

其他激活函数

在这里插入图片描述

如何选择激活函数
在这里插入图片描述

参数初始化

对于某一个神经元来说,需要初始化的参数有两类:一类是权重w,还有一类是偏置b,偏置b初始为0即可。而权重w的初始化比较重要

随机初始化

从均值为0,标准差是1的正态分布中取样,使用一些很小的值对参数W进行初始化

标准初始化

权重参数初始化从区间均匀随值。即在( − 1 d \frac{-1}{\sqrt{d}} d 1, 1 d \frac{1}{\sqrt{d}} d 1)均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量

Xavier初始化(Glorot初始化)

在这里插入图片描述

import tensorflow as tf
init=tf.keras.initializers.glorot_normal()
values=init(shape=(9,1))
print(values)

在这里插入图片描述

import tensorflow as tf
init=tf.keras.initializers.glorot_uniform()
values=init(shape=(9,1))
print(values)

He初始化

在这里插入图片描述

import tensorflow as tf
init=tf.keras.initializers.he_normal()
values=init(shape=(9,1))
print(values)

在这里插入图片描述
在这里插入图片描述

import tensorflow as tf
init=tf.keras.initializers.he_uniform()
values=init(shape=(9,1))
print(values)

神经网络的搭建

通过Sequential搭建

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model=keras.Sequential([
    #第一个隐层
    layers.Dense(3,activation='relu',kernel_initializer='he_normal',name='layer1',input_shape=(3,)),
    #第二个隐层
    layers.Dense(2,activation='relu',kernel_initializer='he_normal',name='layer2'),
    #输出层
    layers.Dense(2,activation='sigmoid',kernel_initializer='he_normal',name='layer3')
],
    name='sequential'
)
model.summary()

在这里插入图片描述
param是权重和偏置的个数

keras.utils.plot_model(model)

在这里插入图片描述

利用function API构建

#定义模型的输入
inputs=keras.Input(shape=(3,),name='input')
#第一个隐层
x=layers.Dense(3,activation='relu',name='layer1')(inputs) #此层输入为inputs,输出为x
#第二个隐层
x=layers.Dense(2,activation='relu',name='layer2')(x)
#输出层
outputs=layers.Dense(2,activation='sigmoid',name='output')(x)

#创建模型
model=keras.Model(inputs=inputs,outputs=outputs,name='Functional API Model')
model.summary()

在这里插入图片描述

keras.utils.plot_model(model,show_shapes=True)

在这里插入图片描述

通过model的子类搭建

#定义一个model的子类
class MyModel(keras.Model):
    #定义网络的层结构
    def __init__(self):
        super(MyModel,self).__init__() #继承并初始化父类MyModel的方法
        #第一个隐层
        self.layers1=layers.Dense(3,activation='relu',name='layer1')
        #第二个隐层
        self.layers2=layers.Dense(2,activation='relu',name='layer2')
        #输出层
        self.layers3=layers.Dense(2,activation='sigmoid',name='layer3')
    #定义网络的前向传播
    def call(self,inputs):
        x=self.layers1(inputs)
        x=self.layers2(x)
        outputs=self.layers3(x)
        return outputs
#实例化模型
model=MyModel()
#设置输入
x=tf.ones((1,3))
y=model(x)
model.summary()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40527560/article/details/131489542
今日推荐