Keras & Tensorflow 笔记
时间:2022-07-24
本文章向大家介绍Keras & Tensorflow 笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Keras是一个高层神经网络API,Keras由纯Python编写而成并基于Tensorflow、Theano以及CNTK后端。Keras为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
- 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
- 支持CNN和RNN,或二者的结合
- 无缝CPU和GPU切换
有串联式和函数式两种建模方式,串联式建模方式
- 串联式Sequential:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
- 函数式:
def model_name(input_shape, output_shape):
inputs = Input(shape = input_shape, dtype = , name = '')
x = Dense(64 , activation='relu')(inputs)
x = Dense(64,activation='relu')(x)
predictions = Dense(output_shape,activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)
return model
学习一般操作步骤
from keras import Model ……
- Generate:
model = Model(inputs = input, outputs = output)
- Compile: model.compile(配置优化器,学习率,误差等参数)
- Fit Train:
model.fit(X_train, Y_train, (X_dev, Y_dev),metric = [])
- Evaluate test:
model.predict(X_test, Y_test)
fit和predict函数有返回值的,最好用一个变量来接住,方便查看预测过程中的变量信息history。
Tricks and Snippets
模型可视化
命令行打印:keras自带的summary函数
model.summary()
调用库,打印保存图片
使用方法:
Keras.utils.plot_model plot_model(model,to_file='a.png')
结果如下,还可以保存为pdf等格式
PlotNeuralNet绘制latex风格的网络图
例图:
使用方法:
- 下载github源文件,安装pycore库,将目录中的python包,拷贝至
/usr/local/lib/python3.7/site-packages/pycore/
- 根据example搭建网络结构的python文件
- 运行python文件生成filename.tex文件
-
pdflatex filename.tex
,此步骤需要提前拷贝源文件layers中sty文件至tex文件目录,用pdflaetx编译需要texlive环境,请提前安装。
model.fit函数调用
这个方法最为硬核,其中mandb还可以横纵向对比多个模型的各个参数,并方便debug和optimize 使用方法:
from rl.callbacks import WandbLogger
import tensorboard
model.fig(巴拉巴拉, callbacks = [函数])
``,在网页localhost可视化
- TensorBoard
- Mandb:callbacks=[WandbLogger()],需要提前进行wandb初始化并在config中定义需要log的变量。 Tensorboard作者没有去尝试,这里就先贴一张Wandb的可视化结果:
Netron软件
下载安装,导入keras模型.h5即可食用,也支持tf、pytorch等多种模型,界面如下
超参数调节
超参数就是模型权重以外的其他参数,比如层种类,层深度、宽度,优化器类型、学习率大小等等,它们都影响着模型的表现和上限,超参数一动,就是一个新的模型了。但是超参数却没有像构建神经网络一样有可遵照的理论指导,一直以来都是从业人员的难点。 虽然网上已经有很多关于超参数调节的帖子,但大多都为经验之谈,是研究人员在实践中摸索、发现并总结的。就像控制理论里最简单PID调节一样,三个参数就能调的人头大,有些模型遵照经验去调还可能不work。 其实这点早就为我们想到了,作者找到了几个超参数调节器
keras tunner
根据验证集的表现自动优化超参数
keras-lr-finder
使用方法:安装python库keras_lr_finder
代码:引用库,包装模型,绘制结果
import keras_lr_finder
# model is a Keras model
lr_finder = LRFinder(model)
# Train a model with batch size 512 for 5 epochs
# with learning rate growing exponentially from 0.0001 to 1
lr_finder.find(x_train, y_train, start_lr=0.0001, end_lr=1, batch_size=512, epochs=5)
# Plot the loss, ignore 20 batches in the beginning and 5 in the end
lr_finder.plot_loss(n_skip_beginning=20, n_skip_end=5)
# Plot rate of change of the loss
# Ignore 20 batches in the beginning and 5 in the end
# Smooth the curve using simple moving average of 20 batches
# Limit the range for y axis to (-0.02, 0.01)
lr_finder.plot_loss_change(sma=20, n_skip_beginning=20, n_skip_end=5, y_lim=(-0.01, 0.01))
利用scikit-learn交互网格搜索超参数
设置备忘
Keras下载的预训练数据存放目录
root\.kerasmodels
错误记录
- 非张量运算变量运算用内置函数,+ - 操作会把张量 转为 Tensorflow,报错
- 实数,不用tf. 或者 K. 函数库运算,报错“张量”
- 张量一定用内置函数,python支持@ + - 等操作,但是偶尔报错
- centos下部署NTP时间服务器同步环境记录
- ASP.NET MVC扩展库
- centos7.2部署vnc服务记录
- nginx访问报错:Too many open files accept:
- iptables之NAT端口转发设置
- 使用Combres 库 ASP.NET 网站优化
- jQuery和asp.net mvc相关资源链接
- JavaScriptSerializer 序列化json 时间格式
- Nginx反向代理+负载均衡简单实现(https方式)
- 在网页中给Flash加上超级链接
- ASP.NET MVC HandleErrorAttribute 和 远程链接
- javascript实现数字转大写金额的函数
- 如何在GridView的Footer内显示总计?
- 自定义WCF的配置文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JUC学习之生产者和消费者
- 在 WSL 2 中基于 Docker 编排 LNMP 运行环境
- PHP 魔术方法、序列化与对象复制
- PHP 静态属性和静态方法
- 通过 Trait 水平扩展 PHP 类功能
- 通过对象组合水平扩展 PHP 类功能
- DO,DTO,VO,POJO 你知道吗?
- Python 爬虫进阶必备 | AES-CBC 的 Pyhon 实现要怎么写?给代码就完事了
- Babel:下一代Javascript语法编译器
- 如何定位及优化SQL语句的性能问题
- Java线程安全如何进行原子操作,一致性的最佳实践
- 冒泡排序
- 现有CDP-DC集群启用Auto-TLS
- 打卡001/这是一篇软文
- 技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置