Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类

Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类_第1张图片

1.import
2.train test指定训练集测试集
3.在sequential()中搭建网络结构,逐层描述每层网络(相当于走了一遍前向传播)
4.在compile()中配置训练方法,告知训练器选择哪种优化器,选择哪个损失函数,以及选择哪种评测指标
5.在fit()中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
6.用summar()打印出网络的机构和参数统计

Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类_第2张图片

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()           

Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类_第3张图片

第四步:
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]

Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类_第4张图片

第五步:
model.fit(训练集的输入特征,训练集的标签,
          batch_size=每次喂入神经网络的样本数,
          epochs=迭代多少次数据集,
          validation_data=(测试集的输入特征,测试集的标签),#data和split选择一种就可
          validation_split=从训练集划分多少比例给测试集,
          validation_freq=多少次epoch测试一次)

Tensorflow2.0学习教程Class3.1_keras六步法搭建网络结构_实现鸢尾花分类_第5张图片

第六步:

    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#.data返回iris数据集的所有输出特征
y_train=datasets.load_iris().target#.target返回iris数据集的所有标签
# 随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率)
np.random.seed(227)# 若不指定227,则每次产生的随机数不一样
np.random.shuffle(x_train)# 随机打乱
np.random.seed(227)
np.random.shuffle(y_train)
tf.random.set_seed(227)# 设置全局随机种子
#测试集可以直接在这里给定,也可以在fit中划分
'''
#用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,#选择20%的数据作为测试集
          validation_freq=20
          )
'''
第六步:打印出网络的机构和参数统计

    model.summary()可以打印出网络的结构和参数统计
'''
model.summary()

第三步改动:class MyMode(Model) model=MyModel 带有跳连的非顺序网络结构

# p11
# '''
# 六步法:
# 1.import
# 2.train test指定训练集测试集
# 3.class MyMode(Model) model=MyModel 带有跳连的非顺序网络结构
# 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#.data返回iris数据集的所有输出特征
y_train=datasets.load_iris().target#.target返回iris数据集的所有标签
# 随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率)
np.random.seed(227)# 若不指定227,则每次产生的随机数不一样
np.random.shuffle(x_train)# 随机打乱
np.random.seed(227)
np.random.shuffle(y_train)
tf.random.set_seed(227)# 设置全局随机种子
#测试集可以直接在这里给定,也可以在fit中划分

'''
带有跳连的非顺序网络结构
第三步:
    可以使用一个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=tf.keras.models.Sequential([
#     tf.keras.layers.Dense(3,activation='softmax',kernel_regularizer=tf.keras.regularizers.l2())
# ])

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,#选择20%的数据作为测试集
          validation_freq=20
          )

model.summary()

你可能感兴趣的:(TensorFlow2.0学习,机器学习,cnn,python)