激活函数
目前很少用这个激活函数,因为在深度神经网络中更新参数时需要从输出层到输入层逐层进行链式求导,而sigmoid函数倒数值为0-0.25之间,链式求导需要多层导数连续相乘,会出现多个0-0.25之间的连续相乘,结果趋于零,产生梯度消失,无法进行参数更新
使用中应避免负数特征进入RELU函数,否则会导致神经元死亡
过拟合的解决方法:L1正则化和L2正则化
用Tensorflow API :tf.keras搭建网络八股
六步法:
1、import
import相关模块,如:import tensorflow as tf
2、train,test
要指定训练集的输入特征x_train和训练集的标签y_train,还可以指定测试集的输入特征x_test和测试集的标签y_test
3、在Sequential()中搭建网络结构:model = tf.keras.model.Sequential,逐层描述没层网络,相当于走了一遍前向传播
4、model.compile(),在compile()中配置训练方法,告知训练时选择哪种优化器,选择哪种损失函数,选择哪种评测指标
5、model.fit ()在fit中执行训练过程,告知训练集和测试集的输入特征和标签,告知每一个batch是多少,告知要迭代多少次数据集
6、model.summary(),用summary打印出网络的结构和参数统计
注:以上六部为以后写代码的提纲,一定一定一定要记住,重要的事情说三遍
可以认为Sequential()是一个容器,封装了一个神经网络结构,在Senquential中要描述从输入层到输出层每一层的网络结构,每一层的网络结构可以是拉直层Flatten(),这一层不含计算,只是形状转换,把输入特征拉直变成一维数组;
batch_size=每次喂入神经网络的样本数
epochs=迭代多少次数据集
注一
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
x_train——训练集输入特征
y_train——训练集标签
batch_size——训练时一次喂入神经网络多少组数据
epochs——数据集迭代循环多少次
validation_split=0.2——告知从训练集中选择20%的数据作为测试集
validation_freq=20——每迭代20次训练集要在测试集中验证一次准确率
注二
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
由于神经网络末端使用了Softmax函数,使得输出是概率分布而不是原始输出,所以from_logits是False
注三
metrics=[‘sparse_categorical_accuracy’])
由于鸢尾花数据集给的标签是0,1,2是数值,神经网络前向传播的输出是概率分布,所以选择sparse_categorical_accuracy作为评测指标
注四
用summary打印出网络结构和参数统计
用Sequential可以搭建出上层输出就是下层输入的顺序网络结构,无法写出一些带有跳连的非顺序网络结构,这个时候可以选择用类class搭建神经网络结构
可以认为__init__函数准备出搭建网络所需的各种积木
call函数调用__init__中搭建好的积木,实现前向传播