两种方法区别:Sequential搭建网络的方法,上层输出就是下层输入的顺序网络结构,但是无法写出一些带有跳连的非顺序网络结构,这个时候我们可以选择用类class搭建神经网络结构,可以使用class类封装一个神经网络结构
**一* 使用Sequential六步法搭建网络:**
1. **import**
2. **train, test**---*要指定喂人网络的训练集和测试集*
3. **model = tf.keras.models .Sequential**---*在Sequential 中搭建网络结构,逐层描述每层网络,相当于走了一遍前向传播*
4. **model.compile**--*在compile 中配置训练方法,告知训练时选择哪种优化器,选择哪个损失函数选择哪种评测指标*
5. **model.fit**--在fit()中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少数据集
6. **model.summary**---用summary()打印出网络的结构和参数统计(第六步相当于提纲)
上诉介绍的函数用法:
* Sequential()---可认为是一个容器,封装了一个神经网络
拉直层:Flatten();把输入特征变成一维数组
全连接层:Dense():全连接层:
Dense实现操作:
output = activation(dot(input, kernel) + bias) 其中是作为参数activation传递的逐元素激活函数,是层创建的权重矩阵,是层创建的偏置向量(仅适用于is时)。---就是y=wx+b
keras.layers.Dense(units,
activation=None,
use_bias=None,
kernel_initializer=None,
bias_initializer=None,
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)
units:神经元个数
activation:激活函数
use_bias:是否使用偏置
kernel_initializer:权重初始化函数
bias_initializer:偏置初始化函数
kernel_regularizer:权重规范化函数
bias_regularizer:偏置值规范化函数
activity_regularizer:输出的规范化函数
kernel_constraint:权重限制函数
bias_constraint:偏置值限制函数
* compile()配置训练方法
form_logits的·值·(有时候准确率的问题可能是因为这个值设置问题)1、如果神经网络预测结果输出前没有经过概率发布,直接输出,form_logits=true1、如果神经网络预测结果输出前经过了概率发布,form_logits=false
* fit()
* .summary打印出网络的结构和参数统计
代码截图
二、 使用Class六步法搭建网络
1. import
2. train, test
3. class MyModel(Model)model=MyModel
4. model.compile
5. model.fit
6. model.summary
import tensorflow as tf
#这两行添加model模块
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
#添加model模块
from sklearn import datasets
import numpy as np
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
#定义IrisModel类
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
#定义了call函数中需要调用的具有三个神经元的全连接网络Dense
self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
def call(self, x):
#在cal1函数中调用self.d1实现了从输入x到输出y的前向传播
y = self.d1(x)
return y
#实例化mode
model = IrisModel()
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary()