Keras高层API之Metrics
在tf.keras中,metrics其实就是起到了一个测量表的作用,即测量损失或者模型精度的变化。metrics的使用分为以下四步:
step1:Build a meter
- acc_meter = metrics.Accuracy()
- loss_meter = metrics.Mean()
step2:Update data
- loss_meter.update_state(loss)
- acc_meter.update_state(y,pred)
step3:Get Average data
- print(step,'loss:',loss_meter.result().numpy())
- print(step,'Evaluate Acc:',total_correct/total,acc_meter.result().numpy())
清除缓存:
- if step % 100 == 0:
- print(step,'loss:',loss_meter.result().numpy())
- loss_meter.reset_states()
- if step % 500 ==0:
- total,total_correct = 0.,0
- acc_meter.reset_states()
实战:
- import tensorflow as tf
- from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
- def preprocess(x, y):
- x = tf.cast(x, dtype=tf.float32) / 255.
- y = tf.cast(y, dtype=tf.int32)
- return x,y
- batchsz = 128
- (x, y), (x_val, y_val) = datasets.mnist.load_data()
- print('datasets:', x.shape, y.shape, x.min(), x.max())
- db = tf.data.Dataset.from_tensor_slices((x,y))
- db = db.map(preprocess).shuffle(60000).batch(batchsz).repeat(10)
- ds_val = tf.data.Dataset.from_tensor_slices((x_val, y_val))
- ds_val = ds_val.map(preprocess).batch(batchsz)
- network = Sequential([layers.Dense(256, activation='relu'),
- layers.Dense(128, activation='relu'),
- layers.Dense(64, activation='relu'),
- layers.Dense(32, activation='relu'),
- layers.Dense(10)])
- network.build(input_shape=(None, 28*28))
- network.summary()
- optimizer = optimizers.Adam(lr=0.01)
- acc_meter = metrics.Accuracy()
- loss_meter = metrics.Mean()
- for step, (x,y) in enumerate(db):
- with tf.GradientTape() as tape:
- # [b, 28, 28] => [b, 784]
- x = tf.reshape(x, (-1, 28*28))
- # [b, 784] => [b, 10]
- out = network(x)
- # [b] => [b, 10]
- y_onehot = tf.one_hot(y, depth=10)
- # [b]
- loss = tf.reduce_mean(tf.losses.categorical_crossentropy(y_onehot, out, from_logits=True))
- loss_meter.update_state(loss)
- grads = tape.gradient(loss, network.trainable_variables)
- optimizer.apply_gradients(zip(grads, network.trainable_variables))
- if step % 100 == 0:
- print(step, 'loss:', loss_meter.result().numpy())
- loss_meter.reset_states()
- # evaluate
- if step % 500 == 0:
- total, total_correct = 0., 0
- acc_meter.reset_states()
- for step, (x, y) in enumerate(ds_val):
- # [b, 28, 28] => [b, 784]
- x = tf.reshape(x, (-1, 28*28))
- # [b, 784] => [b, 10]
- out = network(x)
- # [b, 10] => [b]
- pred = tf.argmax(out, axis=1)
- pred = tf.cast(pred, dtype=tf.int32)
- # bool type
- correct = tf.equal(pred, y)
- # bool tensor => int tensor => numpy
- total_correct += tf.reduce_sum(tf.cast(correct, dtype=tf.int32)).numpy()
- total += x.shape[0]
- acc_meter.update_state(y, pred)
- print(step, 'Evaluate Acc:', total_correct/total, acc_meter.result().numpy())
Keras高层API之Metrics的更多相关文章
- 手写数字识别——利用keras高层API快速搭建并优化网络模型
在<手写数字识别——手动搭建全连接层>一文中,我们通过机器学习的基本公式构建出了一个网络模型,其实现过程毫无疑问是过于复杂了——不得不考虑诸如数据类型匹配.梯度计算.准确度的统计等问题,但 ...
- Keras函数式 API
用Keras定义网络模型有两种方式, Sequential 顺序模型 Keras 函数式 API模型 之前我们介绍了Sequential顺序模型,今天我们来接触一下 Keras 的函数式API模型. ...
- Flask 框架下 Jinja2 模板引擎高层 API 类——Environment
Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本. Environment 类功能: Environment 是 Jinja2 中的一个 ...
- 【小白学PyTorch】21 Keras的API详解(下)池化、Normalization层
文章来自微信公众号:[机器学习炼丹术].作者WX:cyx645016617. 参考目录: 目录 1 池化层 1.1 最大池化层 1.2 平均池化层 1.3 全局最大池化层 1.4 全局平均池化层 2 ...
- TensorFlow 1.4利用Keras+Estimator API进行训练和预测
Tensorflow 1.4中,Keras作为作为核心模块可以直接通过tf.keas进行调用,但是考虑到keras对tfrecords文件进行操作比较麻烦,而将keras模型转成tensorflow中 ...
- Kera高层API
目录 Keras != tf.keras Outline1 Metrics Step1.Build a meter Step2.Update data Step3.Get Average data C ...
- 【小白学PyTorch】21 Keras的API详解(上)卷积、激活、初始化、正则
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑答疑解惑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx6450 ...
- 小白如何学习PyTorch】25 Keras的API详解(下)缓存激活,内存输出,并发解决
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑答疑解惑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx6450 ...
- Tcl脚本调用高层API实现仪表使用和主机创建配置的自己主动化測试用例
#设置Chassis的基本參数,包含IP地址.port的数量等等 set chassisAddr 10.132.238.190 set islot 1 set portList {11 12} ;#端 ...
随机推荐
- HDU_3853_区间dp
http://acm.hdu.edu.cn/showproblem.php?pid=3853 dp[i][j]表示由空白串刷成b的从i到j位所需要的最小次数. 然后在比较a和b的每一位,再次更新dp表 ...
- POJ_2479_DP
http://poj.org/problem?id=2479 从前向后保存起点到每一点的最长串,从后向前保存尾点到每一点的最长串. 然后枚举中断点,找前后和最大值就行了. #include<io ...
- centos下利用phantomjs来完成网站页面快照截图
最近研究了下phantomjs,感觉还是非常不错的. 首先到官网下载一个源码包 http://phantomjs.org/download.html 点击源码包下载如图: 然后在linux下将必要的一 ...
- 031.Python类中的方法
一 类中的方法 1.1 介绍 (1) 普通方法(2) 绑定方法 绑定到对象 (自动传递对象参数) 绑定到类 (自动传递类参数) (3) 静态方法 (无论类还是对象,都可以调用) class Plane ...
- OpenCV图像变换二 投影变换与极坐标变换实现圆形图像修正
投影变换 在放射变换中,物体是在二维空间中变换的.如果物体在三维空间中发生了旋转,那么这种变换就成为投影变换,在投影变换中就会出现阴影或者遮挡,我们可以运用二维投影对三维投影变换进行模块化,来处理阴影 ...
- vue路由--动态路由
前面介绍的路由都是路径和组件一对一映射的 有时候需要多个路径映射到一个组件,这个组件根据参数的不同动态改变,这时候需要用到动态路由 动态路由这样定义路由路径: path: '/foo/:id'--可以 ...
- vue中子组件触发父组件的方法
网上找了几种方法,下面这两种最实用,最明了 方法一:父组件方法返回是字符串或数组时用这种方法 子组件: <template> <button @click="submit& ...
- Java 中常见排序算法
经典的排序算法总结 冒泡排序算法 算法描述: 比较相邻的元素:如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数: 针 ...
- asp.net core 3.1 入口:Program.cs中的Main函数
本文分析Program.cs 中Main()函数中代码的运行顺序分析asp.net core程序的启动,重点不是剖析源码,而是理清程序开始时执行的顺序.到底用了哪些实例,哪些法方. asp.net c ...
- java设计模式 - 单例模式(干货)
深度讲解23种设计模式,力争每种设计模式都刨析到底.废话不多说,开始第一种设计模式 - 单例. 作者已知的单例模式有8种写法,而每一种写法,都有自身的优缺点. 1,使用频率最高的写法,废话不多说,直接 ...