1.import
2.train test指定训练集测试集
3.在sequential()中搭建网络结构,逐层描述每层网络(相当于走了一遍前向传播)
4.在compile()中配置训练方法,告知训练器选择哪种优化器,选择哪个损失函数,以及选择哪种评测指标
5.在fit()中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
6.用summar()打印出网络的机构和参数统计
3.sequential():
sequential()可以认为是个容器,这个容器里封装了一个神经网络结构,
要描述输入层到输出层每一层的网络结构
model=tf.keras.models.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="vaild"or"same")
LSTM层(循环神经网络层):tf.keras.layers.LSTM()
第四步:
compile():
model.compile(optimizer=优化器,
loss=损失函数,
metric=["准确率"])
optimizer可选:'sgd' 和 tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数)
'adagrad' 和 tf.keras.optimizers.Adagrad(lr=学习率)
'adadelta' 和 tf.keras.optimizers.Adadelta(lr=学习率)
'adam' 和 tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)
loss可选:均方误差损失函数'mse' 和 tf.keras.losses.MeanSquaredError()
交叉熵损失函数'sparse_categorical_crossentropy' 和
tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
#from_logits参数是在询问是否是原始输出(有没有经过softmax(概率分布))经过了概率分布则为False,否侧为True
metric(告知网络评测指标)可选:'accuracy':y_和y都是数值,如y_=[1] y=[1]
'catagorical_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]
第五步:
model.fit(训练集的输入特征,训练集的标签,
batch_size=每次喂入神经网络的样本数,
epochs=迭代多少次数据集,
validation_data=(测试集的输入特征,测试集的标签),#data和split选择一种就可
validation_split=从训练集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
第六步:
model.summary()可以打印出网络的结构和参数统计
p8
'''
六步法:
1.import
2.train test指定训练集测试集
3.在sequential()中搭建网络结构,逐层描述每层网络(相当于走了一遍前向传播)
4.在compile()中配置训练方法,告知训练器选择哪种优化器,选择哪个损失函数,以及选择哪种评测指标
5.在fit()中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
6.用summar()打印出网络的机构和参数统计
'''
'''
第一步:引入相关模块
'''
import tensorflow as tf
from sklearn import datasets
import numpy as np
'''
第二步:指定训练集测试集
'''
x_train=datasets.load_iris().data
y_train=datasets.load_iris().target
np.random.seed(227)
np.random.shuffle(x_train)
np.random.seed(227)
np.random.shuffle(y_train)
tf.random.set_seed(227)
'''
#用sequential()可搭建出上层输出就是下层输入的顺序网络结构,但是无法写出一些带有跳连的非顺序网络结构
第三步:搭建网络结构,逐层描述每层网络(相当于走了一遍前向传播)
sequential():
sequential()可以认为是个容器,这个容器里封装了一个神经网络结构,
要描述输入层到输出层每一层的网络结构
model=tf.keras.models.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="vaild"or"same")
LSTM层(循环神经网络层):tf.keras.layers.LSTM()
'''
model=tf.keras.models.Sequential([
tf.keras.layers.Dense(3,activation='softmax',kernel_regularizer=tf.keras.regularizers.l2())
])
'''
第四步:配置训练方法
compile():
model.compile(optimizer=优化器,
loss=损失函数,
metric=["准确率"])
optimizer可选:'sgd' 和 tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数)
'adagrad' 和 tf.keras.optimizers.Adagrad(lr=学习率)
'adadelta' 和 tf.keras.optimizers.Adadelta(lr=学习率)
'adam' 和 tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)
loss可选:均方误差损失函数'mse' 和 tf.keras.losses.MeanSquaredError()
交叉熵损失函数'sparse_categorical_crossentropy' 和
tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
#from_logits参数是在询问是否是原始输出(有没有经过softmax(概率分布))经过了概率分布则为False,否侧为True
metric(告知网络评测指标)可选:'accuracy':y_和y都是数值,如y_=[1] y=[1]
'catagorical_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]
'''
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy']
)
'''
第五步:执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
model.fit(训练集的输入特征,训练集的标签,
batch_size=每次喂入神经网络的样本数,
epochs=迭代多少次数据集,
validation_data=(测试集的输入特征,测试集的标签),#data和split选择一种就可
validation_split=从训练集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
'''
model.fit(x_train,y_train,
batch_size=32,
epochs=500,
validation_split=0.2,
validation_freq=20
)
'''
第六步:打印出网络的机构和参数统计
model.summary()可以打印出网络的结构和参数统计
'''
model.summary()
第三步改动:class MyMode(Model) model=MyModel 带有跳连的非顺序网络结构
import tensorflow as tf
from sklearn import datasets
import numpy as np
x_train=datasets.load_iris().data
y_train=datasets.load_iris().target
np.random.seed(227)
np.random.shuffle(x_train)
np.random.seed(227)
np.random.shuffle(y_train)
tf.random.set_seed(227)
'''
带有跳连的非顺序网络结构
第三步:
可以使用一个class类,封装一个神经网络结构
class MyModel(Mdoel): #MyModel神经网络结构的名字 (model)表示继承了TensorFlow的Model类
def __init__(self):
super(MyModel,self).__init__()
定义网络结构块
def call(selfself,x):#写出前向传播
调用网络结构快,实现前向传播
return y
model=MyModel()
'''
class IrisModel(tf.keras.Model):
def __init__(self):
super(IrisModel, self).__init__()
self.d1=tf.keras.layers.Dense(3,activation='softmax',
kernel_regularizer=tf.keras.regularizers.l2())
def call(self,x):
y=self.d1(x)
return y
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()