使用八股搭建神经网络

神经网络搭建八股

使用tf.keras

六步法搭建模型

1.import

2.train, test 指定输入特征/标签

3.model = tf.keras.model.Sequential

在Squential,搭建神经网络

4.model.compile

配置训练方法,选择哪种优化器、损失函数、评测指标

5.model.fit 执行训练过程,告知训练集输入特征,batch,epoch

6.model.summary打印网络结构和参数统计

model = tf.keras.model.Sequential

Sequential是个容器,封装了网络结构

网络结构例子:

拉直层:tf.keras.layers.Flatten()

全连接层:tf.keras.layers.Dense(神经元个数,activetion="激活函数",kernel_regularizer=那种正则化)

卷积层:

tf.keras.layers.Conv2D(filters= 卷积核个数,kernel_size=卷积核尺寸,strides=卷积步长,padding="valid"or"same"

LSTM层:

tf.keras.layers.LSTM()

model.compile

model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"]

后期可通过tensorflow官网查询函数的具体用法,调节超参数

有些网络输出经过softmax概率分布输出,有些不经过概率分布输出 

当网络评测指标和蒙的概率一样,例如十分类概率为.1/10.可能概率分布错了

独热码y_和y是[010]网络输出则为[0.xx, 0.xx, 0.xx]

 第三种方法 y_= [1] y =[0.2xx,0xx,0xx]

model.fit

model.fit(训练集的输入特征,训练集的标签,batch_size, epochs=, 

validation_data=(测试集的输入特征,标签),

validation_split=从训练集划分多少比例给测试集,

validation_freq=多少次epoch测试一次)

model.summary

重构Iris分类

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(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)

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, validation_freq=20)

model.summary()

自定义搭建模型

swquential可以搭建上层输出就是下层输入的网络结构,但是无法搭建带有跳连特征的非顺序网络结构

class MyModel(Model)

        def __init__(self):

                super(MyModel, self) __init()

                定义网络结构块

        def call(self, x): #写出前向传播

               调用网络结构块,实现前向传播

        return y     

model = MyModel

__init__定义出积木

call调用积木,实现前向传播

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import 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)

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

每循环一次train,计算一次test的测试指标

MNIST数据集

1.导入MNIST数据集

mnist=tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) =  mnist.load_data(

2.作为输入特征,输入神经网络时,将数据拉伸成一维数组:

tf.keras.layers.Flatten()

把784个像素点的灰度值作为输入特征放入神经网络

plt.imshow(x_train[0], cmap='gray')#绘制灰度图

plt.show()

0表示纯黑色255表示纯白色

需要对测试集和数据集进行归一化处理,把数值变小,更适合神经网络吸收,使用sequental训练模型,由于输入特征为数组,输出为概率分布,所以我们选择sparse_categorical_accuracy

import tensorflow as tf

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

准确率是测试集的准确率

自定义Model实现 __init__中定义cell函数中用到的层

import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


class MnistModel(Model):
    def __init__(self):
        super(MnistModel, self).__init__()
        self.flatten = Flatten()
        self.d1 = Dense(128, activation='relu')
        self.d2 = Dense(10, activation='softmax')

    def call(self, x):
        x = self.flatten(x)
        x = self.d1(x)
        y = self.d2(x)
        return y


model = MnistModel()

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

FASHION数据集

import tensorflow as tf

fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = fashion.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/789404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高压线束屏蔽效能测试之管中管法、线注入法

一、引言 上期推文介绍了高压线束屏蔽效能测试方法三同轴法,本篇文章将继续介绍高压线束相关测试方法——管中管法和线注入法。 二、管中管法 1、一般要求 管中管法参照IEC62153-4-7标准对高低压连接器进行零部件级屏蔽效能测试。在测试时,通过金属延长管…

安卓腾讯桌球多功能助手直装版

安卓13自测效果,安卓12-安卓12以下一定可以的,QQ登陆的话扫码登陆,两个手机,一个扫码,一个游戏,一个手机的话,你可以下载个虚拟机,然后本机直装,用虚拟机QQ扫码即可 微信…

使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例

介绍 WordPress是一款免费开源的网站内容管理系统(CMS),它可以帮助用户简单快捷地创建和管理自己的网站,包括博客、新闻网站、电子商务网站、社交网络等等。WordPress 有丰富的主题和插件库,使得用户可以轻松地为网站…

点线面推进未来智造

如今,宁波拥有门类齐全的制造业体系,形成了以石油化工、汽车及零部件、电工电器、纺织服装等为支柱的产业集群。 宁波工业的发展并非一蹴而就,蓝卓总经理谭彰详细解读了宁波制造业的发展历程与当下目标,从工业小市到工业大市、工业…

【深度学习】第5章——卷积神经网络(CNN)

一、卷积神经网络 1.定义 卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理具有网格状拓扑结构数据的深度学习模型,特别适用于图像和视频处理。CNN 通过局部连接和权重共享机制,有效地减少了参数数量&#x…

阿一课代表今日分享之使用dnscat2 进行dns隧道反弹shell(直连模式linux对linux)

DNS介绍 DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 DNS的记录类型有很多&a…

数据结构--二叉树收尾

1.二叉树销毁 运用递归方法 分类: 根节点左子树右子树(一般都是这个思路,不断进行递归即可) 选择方法(分析): 前序:如果直接销毁根就无法找到左子树右子树 中序:也会导致丢失其…

非关系型数据库(NoSQL)与 关系型数据库(RDBMS)的比较

非关系型数据库(NoSQL)与 关系型数据库(RDBMS)的比较 一、引言二、非关系型数据库(NoSQL)2.1 优势 三、关系型数据库(RDBMS)3.1 优势 四、结论 💖The Begin💖…

【ai_agent】从零写一个agent框架(四)用rust制作一个python的虚拟运行环境。

前言 为了增加框架的扩展性和适用性,我们要能够在流程节点中运行python脚本。 这个时候需要考虑几个问题: 1 为什么是python? 思考:老实说我并不喜欢python,我更倾向于lua这种短小轻快的脚本。在我之前写的规则引擎…

fm足球经理Football Manager 2022 for mac 下载安装包

《Football Manager 2022》(足球经理2022)是一款由Sports Interactive开发并由SEGA发行的足球管理模拟游戏。这款游戏让玩家扮演足球俱乐部的 manager(经理),负责球队的所有管理工作,包括战术制定、球员转会…

优画质低功耗,空域GPU超分技术引领图像渲染新体验

随着大数据时代的发展,虚拟现实、增强现实等需要实时图像处理和计算的应用,对GPU加速引擎服务提出了新的挑战和机遇。 HarmonyOS SDK GPU加速引擎服务(XEngine Kit)提供的空域GPU超分能力,基于单帧输入图像&#xff0…

NLP入门——卷积语言模型的搭建、训练与预测

语言模型建模是针对句子建模,主要分为掩码语言模型和自回归语言模型。 我们从corpus中截取一句话作为例子,这句话是bpe分词后的句子: 1994 年 5 月 17 日 安全 理事会 第 33 77 次 会议 通过 掩码语言模型的主要机制是:例如将33 7…

力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)

力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列) 文章目录 力扣爆刷第162天之TOP100五连刷76-80(最小路径和、最长公共前缀、最长连续序列)一、64. 最小路径和二、221. 最大正方形三、162. 寻找峰值…

OpenCV距离变换函数distanceTransform的使用

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数,主要用于计算图像中每个像素到最近的背景(通常是非零像素到零像素&…

「C++系列」C++ 修饰符类型

文章目录 一、C 修饰符类型1. 访问修饰符(Access Modifiers)2. 存储类修饰符(Storage Class Specifiers)3. 类型修饰符(Type Modifiers)4. 函数修饰符 二、C 修饰符类型-案例1. 访问修饰符案例2. 存储类修饰…

JavaSE 面向对象程序设计进阶 IO流 字符输入输出流及底层原理

目录 字符输入流FileReader 空参的read方法 带参的read方法 字符输出流FileWriter 字符输入流底层原理 字符输出流底层原理 字符输入流FileReader 输入流 一次读一个字节 遇到中文时 一次读多个字节 输出流 底层会把数据按照指定的编码方式进行编码 在变成直接写到文件当…

Defensor 4.5:构建数据资产为中心的安全运营体系

5月31日“向星力”未来数据技术峰会上,星环科技重磅发布数据安全管理平台 Defensor 4.5版本。新版本引入了以数据资产为中心的数据安全运营体系,通过智能化大模型技术,帮助企业快速、精准地识别核心重要资产;建设全局的数据安全策…

昇思MindSpore学习笔记6-04计算机视觉--Shufflenet图像分类

摘要: 记录MindSpore AI框架使用ShuffleNet网络对CIFAR-10数据集进行分类的过程、步骤和方法。包括环境准备、下载数据集、数据集加载和预处理、构建模型、模型训练、模型评估、模型测试等。 一、概念 1.ShuffleNet网络 旷视科技提出的CNN模型 应用在移动端 通…

【JavaSE】图书管理系统

目录 最终效果book包Book类BookList类 user包User类AdmiUser类(管理员类)NormalUser类(普通用户类) opeeration包IOperation接口FindOpertion类(查找操作)AddOpertion类(增加操作)De…

关于解决双屏幕鼠标移动方向问题

1.点开设置》系统》屏幕 2.分清屏幕标识,一般笔记本为1 3.点击要移动的屏幕,然后按住鼠标左键不方进行移动 感谢您的浏览,希望可以帮到您!