当前位置: 首页 > news >正文

TensorFlow-keras介绍(一)

目录

一.回顾神经网络

1.神经网络

2.感知机

3.神经网络原理

1.softmax回归

2.交叉熵

二.Keras介绍

1.Keras框架的特点

2.使用tf.keras进行模型构建

1.使用Sequential构建模型

2.利用keras提供的API建立较为复杂的模型

3.model的子类进行创建

 都看到这里了,点个赞把!!!


一.回顾神经网络

1.神经网络

人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN)。是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的 计算模型。经典的神经网络结构包含三个层次的神经网络。分别输入层,输出层以及隐藏层。

其中没层的圆圈代表一个神经元,隐藏层和输出层的神经元由输入的数据计算后输出,输入层的神经元只有输入。

神经网络特点:1.每个连接都有一个权值,2.同一层神经元之间没用连接,3.最后的输出结果对应的层也叫全连接层

2.感知机

感知机是模拟大脑神经网络处理数据的过程,每个数据计算权重加上偏置后在经过一个函数处理

3.神经网络原理

神经网络的主要用途在于分类,分类又分为二分类和多分类。

神经网络在解决多分类问题最常用的方法是设置n个节点,其中n为类别个数

任何事件发生的概率都在0和1之间,且总又某一个事件发生。如果将分类问题中的"一个样例属于一个某一个类别"看成一个概率事件,那么训练数据的正确答案就符合一个概率分布,如何将神经网络向前传播得到的结果也变成了概率分布 ?Softmax回归就是一个常用的方法

1.softmax回归

Softmax回归将神经网络输出转换成概率结果,数据结果权重和偏置计算后,softmax函数会将所有的结果当作e的指数后作为分母,分子是一个结果当成e的指数的值,那么所有结果都转换成了0-1之间的值,也就是概率

 这样就把神经网络的输出变成一个概率输出了,那么如何计算神经网络计算的结果和真实结果之间的误差呢?

2.交叉熵

 为了衡量距离,目标值需要进行one-bot编码(比如又十个类别,而这个结果是第五个类别,那么编码后就是[0,0,0,0,1,0,0,0,0,0]),能与概率值一一对应

 那么带入公式后的损失就是:

0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)

 因为除了这个样本所属的类别结果为1以外,其他的结果都为0。所有损失为1*log(0.10),那么为了减少这个损失,需要将这个值变小,也就是将log中的0.10变大,也就是训练的时候将这个概率变大的情况来训练权重和偏置。从而提高目标值为1的位置的概率大小

二.Keras介绍

Keras是一个用python编写的开源神经库,能够运行在TensorFlow,Micsrosoft, Toolkit,Theano或PlaidML之上,kerea是单独是深度学习框架,一些代码用到了Tnesorflow的API,但在TensorFlow1.9新增加了tf.kerea。Keras与TF的深度集成。

1.Keras框架的特点

1.用户友好:keras提供了简洁,一致的API,使用户可以轻松定义,训练,评估深度学习模型,无论是初学者还是经验丰富的研究人员都可以轻松入手。

2.模块化和可组合性:Keras通过模块化的方式组织深度学习模型,用户可以根据自己的需求选择不同的层、激活函数、优化器等组件,并简单地将它们组合在一起构建复杂的模型。

3.支持多种深度学习库:Keras可以基于多种底层深度学习库进行计算,包括TensorFlow、Theano和CNTK。这使得用户可以根据自己的偏好和需求选择底层库,并无缝地切换。

4.丰富的文档和社区支持:Keras拥有丰富的文档和活跃的社区,用户可以轻松找到各种教程、示例代码和解决方案,以及与其他用户交流和讨论。

2.使用tf.keras进行模型构建

1.简单模型使用Sequential进行构建

2.复杂模型使用函数式变形构建

3.自定义Layers(model的子类)构建

1.使用Sequential构建模型

tf。keras是一个神经网络库,我们可以用它构建相应的神经网络。其中简单的神经网络如人工神经网络ANN这样简单的模型,可以用Sequential构建

tf.keras.Sequenial模型是层的线性推叠,它的构造函数会采用一系列层实例:

如图所示,可以构造2个隐层,没层五个神经元。一个输出层,包括4个预测点。

 Dense用来创建层和没层的神经元个数

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras import utils
from tensorflow.keras.layers import Densemodel=Sequential([# 第一个隐层层,5个神经元,使用rule函数,input_shape是数据形状Dense(5,activation="rule",input_shape=(3,)),# 第二个隐藏层Dense(5,activation='rule'),# 输出层,4个分类激活函数使用softmaxDense(4,activation='softmax')
],# 为这个取一个名字name='notwork'
)model.summary()# 这个函数将画出模型结构图并保存图片,
# to_file:保存路径,show_shapes:指定是否显示数据的形状,默认为False,show_layer_names:指定是否显示层名称默认为True
utils.plot_model(model, to_file='model.png', show_shapes=True, show_dtype=True,show_layer_names=True)

2.利用keras提供的API建立较为复杂的模型

 

import tensorflow as tf
from tensorflow.keras import keras
from tensorflow.keras.layers import layers# 定义模型的数据输入
Input_Layer=keras.Input(shape=(3,),name="input_1")
# 第一个隐藏层
X1=layers.Dense(5,activation='relu',name='Layer1')(Input_Layer)
# 第二个隐藏层
X2=layers.Dense(5,activation='relu',name='Layer2')(X1)# 输出层
Output_Layer = layers.Dense(4, activation ="softmax", name="Output")(X2)# 创建模型
model=keras.Model(inputs=Input_Layer,outputs=Output_Layer,name="Model_1")model.summary()
3.model的子类进行创建

 通过model的子类构建模型,在__init__中定义神经网络的层,在call方法中一定网络的向前传播方法。

import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers as layersclass My_Models(keras.Model):# 定义网络层结构def __init__(self):super(My_Models, self).__init__()# 第一个隐藏层self.layer1 = layers.Dense(5, activation="relu", name="Layer1")# 第二个隐藏层self.layer2 = layers.Dense(5, activation="relu", name="Layer2")# 定义输出层self.output_layer = layers.Dense(4, activation="softmax", name="Output")# 定义网络的前向传播def __call__(self, inputs):x = self.layer1(inputs)x = self.layer2(x)outputs = self.output_layer(x)return outputs# 实例化
model1 = My_Models()
# 设置输入
x = tf.ones((1, 4))
y = model1(x)

 都看到这里了,点个赞把!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 速盾:便宜的高防 CDN 推荐,高防 CDN 能抵御 DDoS 吗?
  • 探索 JavaScript 中的 instanceof 关键字
  • 3. GIS后端工程师岗位职责、技术要求和常见面试题
  • C语言新手小白详细教程(8)ASCll编码和字符串
  • macos下的 sed命令安装与使用 gnu-sed
  • 华为 HCIP-Datacom H12-821 题库 (10)
  • 损失函数与反向传播
  • 网络编程(TCP+网络模型)
  • Intel 在人工智能领域
  • ClickHouse 的安装与基本配置
  • C++深入理解哈希表的设计与实现:处理冲突的多种方法
  • Python股票接口实现量化交易的优势是什么
  • Ubuntu环境的MySql下载安装
  • Flutter自动打包ios ipa并且上传
  • 【BIO、NIO、AIO适用场景分析】
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • Angular 响应式表单之下拉框
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JS函数式编程 数组部分风格 ES6版
  • Js基础——数据类型之Null和Undefined
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • orm2 中文文档 3.1 模型属性
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SOFAMosn配置模型
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring声明式事务管理之一:五大属性分析
  • Vue2.0 实现互斥
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • windows下如何用phpstorm同步测试服务器
  • 给第三方使用接口的 URL 签名实现
  • 入手阿里云新服务器的部署NODE
  • 使用agvtool更改app version/build
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 线性表及其算法(java实现)
  • 小程序测试方案初探
  • 追踪解析 FutureTask 源码
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ###项目技术发展史
  • $.ajax()
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Python第六天)文件处理
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (三)mysql_MYSQL(三)
  • (转) Face-Resources
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转载)hibernate缓存
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .Net CF下精确的计时器
  • .NET Core Web APi类库如何内嵌运行?