提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
了解6步法搭建神经网络。
一、六步法搭建神经网路
-
import相关模块
-
告知要喂入神经网络的训练集和测试集是什么?(train,test)
指定训练集的输入特征x_train和测试集的标签y_train
指定测试集的输入特征x_test和测试集的标签y_test -
- 在Sequential()中搭建网络结构,逐层描述每层网络
走了一遍前向传播
model = tf.keras.models.Sequential([]) - 定义class
class Mymodel(Model)----------类
model = Mymodel()--------类创建对象
- 在Sequential()中搭建网络结构,逐层描述每层网络
-
在compile()配置训练方法
告知训练时选择哪种优化器,哪个损失函数,哪种评测指标
model.compile() -
在fit中执行训练过程
告知训练集和测试集的输入特征和标签,每个bitch是多少,迭代多少次数据集
model.fit() -
用summary打印出网络的结构和参数设计
model.summary(0
二、网络结构
1.Sequential
代码如下:
# 1.导入模块---import
import tensorflow as tf
from sklearn import datasets
import numpy as np
# 2.指定训练集和测试集的特征和标签---(x_train,y_train),(x_test,y_test)
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
# 3.数据集乱序,使得特征和标签乱序后一一对应---shuffle
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
np.random.seed(116)
# 4.搭建网络结构模型,逐层的描述每一层网络
# ---Sequential([tf.keras.layers.Dense(神经元个数,激活函数,正则化)])
model = tf.keras.models.Sequential(
[tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
# 5.为网络模型配置训练方法---compile(优化器,损失函数,评测指标)
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy']
)
# 6.训练网络---fit(训练集的特征,标签,batch_size=,epochs=,validation_split,validation_freq=)
model.fit(x_train, y_train, batch_size=12, epochs=500,
validation_split=0.2,
validation_freq=20,
)
# 7.打印出网络结构和参数---summary()
model.summary()
2.class
# 1.导入相关模块---import
import tensorflow as tf
from keras.layers import Dense
from keras import Model
from sklearn import datasets
import numpy as np
# 2.指定训练集和测试集的输入特征和标签---(x_train,y_train),(x_test,y_test)
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)
np.random.seed(116)
# 3.搭建神经网络结构---class(全连接层:神经元个数,激活函数,正则化)
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
def call(self, x):
y = self.d1(x)
print(y)
return y
model = IrisModel()
# 4.为网络模型配置训练方法---compile(优化器,损失函数,评测指标)
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
# 5.传入测试集训练网络模型---fit
# (测试集特征,标签,batch_size=,epochs=,validation_spilt=,validation_freq=)
model.fit(x_train, y_train, batch_size=12, epochs=500,
validation_split=0.2,
validation_freq=20)
# 6.打印网络结构和参数---summary
model.summary()
总结
1.Sequential可以快速搭建网络,上层输出就是下层输入的顺序网络结构
2.如果网络包含跳连等复杂网络结构,Sequential无法表示,需要class来声明网络结构。