两种方法:搭建神经网络八股---六步法

 两种方法区别: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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值