TensorFlow2.0笔记(三)——用八股搭建神经网络

北大MOOC——TF2.0笔记

以下是我的听课笔记,供以后回忆(大多内容来自ppt)

一.使用八股搭建神经网络(直接调用函数,简化代码,前两章函数内部原理)

1.用Tensorflow API:tf.keras搭建网络八股

六步法
import :引入相关模块

train,   test:告知要喂如网络的训练集和测试集是什么,要指定训练集以及测试集的的输入特征和标签

model = tf.keras.models.Sequential :在Sequential中搭建网络结构,逐层描述每层网络(=一次前向传播)

model.compile :在compile()中配置训练方法,训练时使用哪种优化器,哪个损失函数,哪种评测指标

model.fit :在fit 中执行训练过程,告知训练集和测试集的输入特征和标签,每个batch是多少,要迭代epoch多少次数据集

model.summary:使用summary()打印出网络的结构和参数统计

以上六步操作就是写代码的提纲。

1.1 Sequential :(搭建网络结构)

可以将其看作是一个容器,要描述从输入层到输出层每一层的网络结构。

每层的网络结构可以是 :

拉直层 :tf.keras.layers.Flatten( ) 此层不含计算,只是形状转换,把输入特征拉直变为一维数组

全连接层: tf.keras.layers.Dense(神经元个数, activation= "激活函数“ , kernel_regularizer=哪种正则化) 

activation(字符串给出)可选: relu、 softmax、 sigmoid 、 tanh

kernel_regularizer可选: tf.keras.regularizers.l1()、tf.keras.regularizers.l2()

卷积层: tf.keras.layers.Conv2D(filters = 卷积核个数, kernel_size = 卷积核尺寸, strides = 卷积步长, padding = " valid" or "same")

LSTM层: tf.keras.layers.LSTM() 

1.2 model.compile :(配置训练方法)

model.compile(optimizer = 优化器, loss = 损失函数 metrics = [“准确率”] )

Optimizer可选: (字符串或函数形式)

      ‘sgd’or tf.keras.optimizers.SGD (lr=学习率,momentum=动量参数)

      ‘adagrad’or tf.keras.optimizers.Adagrad (lr=学习率) ‘adadelta’or tf.keras.optimizers.Adadelta (lr=学习率)

      ‘adam’or tf.keras.optimizers.Adam (lr=学习率, beta_1=0.9, beta_2=0.999)

loss可选:

      ‘mse’or tf.keras.losses.MeanSquaredError()                               ‘sparse_categorical_crossentropy’ortf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)  

#有些神经网络的输出是经过softmax等函数的概率分布则from_logits=False,若不经过概率分布直接输出则from_logits=Ture

#若是十分类,预测概率是10分之一,则可能是from_logits参数设置错误

Metrics可选: (网络评测指标)

      ‘accuracy’ :y_和y都是数值,如y_=[1]  y=[1]   

      ‘categorical_accuracy’ :y_和y都是独热码(概率分布),如y_=[0,1,0] y=[0.256,0.695,0.048]

      ‘sparse_categorical_accuracy’ :y_是数值,y是独热码(概率分布),如y_=[1] y=[0.256,0.695,0.048]

以后都是以数值形式给出标签,以概率分布形式表示输出,则常用 ‘sparse_categorical_accuracy’

1.3 model.fit :(执行训练过程)

model.fit (训练集的输入特征,   训练集的标签,   batch_size=  ,    epochs=  ,  validation_data=(测试集的输入特征,测试集的标签), validation_split=从训练集划分多少比例给测试集, validation_freq= 多少次epoch后,使用一次测试集) 

1.4 model.summary:(打印网络的结构和参数)

import tensorflow as tf
from sklearn import datasets
import numpy as np
#训练集的输入特征和标签
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
#测试集的输入特征和标签也可以在此处给定,或者在fit中指定validation_split=0.2给出比例,选择从训练集中划分
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)


#tf.keras.models.Sequential搭建网络结构
#此处的3代表神经元的个数,(神经元个数,激活函数,正则化方法)
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())])


#model.compile配置训练方法
#(优化器,损失函数,评测指标)
#由于神经网络末端使用了激活函数softmax,使得输出是概率分布不是原始输出,所以此处的from_logits=False
#由于输入是数值,输出是概率分布则使用'sparse_categorical_accuracy'作为评测指标
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

#model.fit执行训练过程
#执行训练过程(训练集输入特征,训练集标签,训练时一次喂入网络的数据个数batch,训练集迭代次数epochs,
# 从训练集中选取测试集的比例 validation_split,每迭代20次数据集验证一次正确率alidation_freq=20)
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)


model.summary() #打印网络,参数

输出:

TensorFlow2.0笔记(三)——用八股搭建神经网络_第1张图片

2. 用类class搭建神经网络

类class可搭建非顺序神经网络与顺序神经网络,我们现在所见到的都是顺序神经网络。
顺序网络:每层都只有一个前驱和后继,即上层的输出,是此层的输入,此层的输出,是下次的输入数据。

非顺序神经网络:在某些情况下,会合并多个输入,产生一个输出。

3. MNIST数据集: 

TensorFlow2.0笔记(三)——用八股搭建神经网络_第2张图片

4. FASHION数据集: 

TensorFlow2.0笔记(三)——用八股搭建神经网络_第3张图片

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