Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SessionRunHook的成员函数的调用顺序是什么?

SessionRunHook的成员函数的调用顺序是什么?
EN

Stack Overflow用户
提问于 2017-08-06 13:11:01
回答 2查看 9.5K关注 0票数 13

看完API DOC后,我也不明白SessionRunHook的用法。例如,调用SessionRunHook的成员函数的顺序是什么?是after_create_session -> before_run -> begin -> after_run -> end吗?我找不到有详细示例的教程,有没有更详细的解释?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-17 16:42:52

你可以找到一个教程here,有点长,但你可以跳过构建网络的部分。或者你可以阅读我下面的小总结,基于我的经验。

首先,应该使用MonitoredSession而不是普通的Session

A SessionRunHook扩展了session.run()MonitoredSession的调用。

然后,可以在here中找到一些常见的SessionRunHook类。一个简单的示例是LoggingTensorHook,但是您可能希望在导入后添加以下行,以便在运行时查看日志:

代码语言:javascript
运行
AI代码解释
复制
tf.logging.set_verbosity(tf.logging.INFO)

或者,您可以选择实现自己的SessionRunHook类。一个简单的例子来自cifar10 tutorial

代码语言:javascript
运行
AI代码解释
复制
class _LoggerHook(tf.train.SessionRunHook):
  """Logs loss and runtime."""

  def begin(self):
    self._step = -1
    self._start_time = time.time()

  def before_run(self, run_context):
    self._step += 1
    return tf.train.SessionRunArgs(loss)  # Asks for loss value.

  def after_run(self, run_context, run_values):
    if self._step % FLAGS.log_frequency == 0:
      current_time = time.time()
      duration = current_time - self._start_time
      self._start_time = current_time

      loss_value = run_values.results
      examples_per_sec = FLAGS.log_frequency * FLAGS.batch_size / duration
      sec_per_batch = float(duration / FLAGS.log_frequency)

      format_str = ('%s: step %d, loss = %.2f (%.1f examples/sec; %.3f '
                    'sec/batch)')
      print (format_str % (datetime.now(), self._step, loss_value,
                           examples_per_sec, sec_per_batch))

其中loss是在类外部定义的。此_LoggerHook使用print打印信息,而LoggingTensorHook使用tf.logging.INFO打印信息。

最后,为了更好地理解它的工作原理,使用MonitoredSession here以伪代码的形式给出了执行顺序

代码语言:javascript
运行
AI代码解释
复制
  call hooks.begin()
  sess = tf.Session()
  call hooks.after_create_session()
  while not stop is requested:  # py code: while not mon_sess.should_stop():
    call hooks.before_run()
    try:
      results = sess.run(merged_fetches, feed_dict=merged_feeds)
    except (errors.OutOfRangeError, StopIteration):
      break
    call hooks.after_run()
  call hooks.end()
  sess.close()

希望这能有所帮助。

票数 28
EN

Stack Overflow用户

发布于 2018-05-11 01:12:54

tf.SessionRunHook使您能够在代码中执行的每个会话运行命令期间添加自定义代码。为了理解它,我在下面创建了一个简单的示例:

  1. 我们希望在每次更新参数后打印损失值。
  2. 我们将使用SessionRunHook来实现这一点。

创建张量流图

代码语言:javascript
运行
AI代码解释
复制
import tensorflow as tf
import numpy as np

x = tf.placeholder(shape=(10, 2), dtype=tf.float32)
w = tf.Variable(initial_value=[[10.], [10.]])
w0 = [[1], [1.]]
y = tf.matmul(x, w0)
loss = tf.reduce_mean((tf.matmul(x, w) - y) ** 2)
optimizer = tf.train.AdamOptimizer(0.001).minimize(loss)

创建钩子的

代码语言:javascript
运行
AI代码解释
复制
class _Hook(tf.train.SessionRunHook):
  def __init__(self, loss):
    self.loss = loss

  def begin(self):
    pass

  def before_run(self, run_context):
    return tf.train.SessionRunArgs(self.loss)  

  def after_run(self, run_context, run_values):
    loss_value = run_values.results
    print("loss value:", loss_value)

使用hook 创建受监视的会话

代码语言:javascript
运行
AI代码解释
复制
sess = tf.train.MonitoredSession(hooks=[_Hook(loss)])

列车

代码语言:javascript
运行
AI代码解释
复制
for _ in range(10):
  x_ = np.random.random((10, 2))
  sess.run(optimizer, {x: x_})
# Output
loss value: 21.244701
loss value: 19.39169
loss value: 16.02665
loss value: 16.717144
loss value: 15.389178
loss value: 16.23935
loss value: 14.299083
loss value: 9.624525
loss value: 5.654896
loss value: 10.689494
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45532365

复制
相关文章
在 Ubuntu 中安装 DHCP 服务器
1、 运行下面的命令来安装 DHCP 服务器包,也就是 dhcp3-server。
用户4988085
2021/09/15
7.6K0
在服务器(Windows)中开启声音
1.使用远程桌面连接服务器,进入服务器以后右键单击开始,选择运行 image.png 2. 点击运行之后,在输入框内输入:gpedit.msc image.png 3、打开之后,依次点击:计算机配置--管理模板--windows组件--远程桌面服务--远程桌面会话主机--设备和资源重定向--左键双击允许音频录制重定向--选择已启用后点应用。 image.png image.png image.png image.png image.png 4.点击服务器管理器,找到工具,打开服务 image.png ima
逸轩
2021/10/29
16.3K0
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.8K0
在服务器上运行Python项目
Anaconda是一个开源Python发行版本,包括Python 和很多常用库如Numpy、Matplotlib等,对小白很方便
Minerva
2020/05/25
4.2K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.2K0
在Java中调用Python
在 Ubuntu 中 安装python
virtualenvwrapper: 基于 virtualenv 之上的一个工具,通过它可以方便的创建/激活/管理/销毁虚拟环境,没它的话进行上面的操作将会相当麻烦。
py3study
2020/01/09
2.4K0
在 Python 中解析 JSON 数据
json模块是Python 标准库的一部分,它允许你对 JSON 数据进行编码和解码。
雪梦科技
2020/06/28
17.3K0
在windows中:双击运行Python
一、安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退。怎样避免闪退呢?
py3study
2020/01/06
4.6K0
在windows中:双击运行Python
在 Python 中播放声音
我们首先检查playsound库,它为在Python中播放声音文件提供了一个简单直接的解决方案。凭借其最低的设置要求,开发人员可以使用单个函数调用将音频播放快速集成到他们的应用程序中。但是,对于更高级的音频功能,我们深入研究了两个流行的库:pygame和pyglet。Pygame是一个强大的多媒体库,以其处理音频,图形和用户输入的能力而闻名。
很酷的站长
2023/08/11
8940
在 Python 中播放声音
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.3K0
python在sqlite中插入数据
python通过引入sqlite的包,就能够直接操作sqlite数据库 import sqlite3 import math cx=sqlite3.connect("mydatabase.sqli
py3study
2020/01/06
4K0
在LaTeX中插入python代码
老师突然要求交上去的论文需要在附录加上代码,奈何我使用的LaTeX模板只能高亮显示Matlab的代码,但是我写论文的时候绝大部分代码都是用Python写的在这里实名吐槽一下Matlab的数据处理功能这么拉跨,不知道为什么还被拿来当数据挖掘课的第一语言,没办法,只能找一个方法让LaTeX里面能高亮显示Python代码。
Hsinyan
2022/06/19
6.8K0
在LaTeX中插入python代码
getopt在Python中的使用
在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为”-“加上单个字母选项;长选项为”–“加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。
全栈程序员站长
2022/08/13
7K0
在Linux/CentOS中编译安装Python
心血来潮,想学习一下Python,听说用来做爬虫还不错。先从运行环境开始入手,CentOS中已经内置了Python,但版本似乎比较老,通过python -V命令看到版本是2.4.3。目前Python 2.x的最新版本号是2.7.8,那么就开始动手升级一下。
魏杰
2022/12/23
7280
Python在HiveQL中的运用
在写HiveQL的时候,往往发现内置函数不够用,Hive支持用户自定义函数UDF,使用Java进行开发。很多时候这显得过于繁重。因而Hive中提供了Transform机制(基于hadoop streaming),这种机制相当于提供了一个脚本程序的入口,因此我们可以很方便的使用shell、perl、python等语言进行开发。
py3study
2020/01/13
1.6K0
在latex中写python代码
大家都知道,python现在用的是越来越多了,功能强大,易于上手,如果能借助于其强大的绘图功能,latex岂不碉堡了?
py3study
2020/01/07
2K0
在latex中写python代码
在 Xcode 9 中搭建 Python
macOS、Xcode 9、Python(macOS 默认安装了 Python2.7)。
py3study
2020/01/09
1.8K0
在Python中如何使用Elasticsearch?
在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。
马哥linux运维
2019/06/10
8.2K0
在Python中如何使用Elasticsearch?
在Python中定义Main函数
多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。
程序员皮克
2021/12/29
4K0
Python在日常中的使用
今天想要整理下电脑硬盘的文件,只要一些有用的方便共享,然后发现文件组织结构是这个样子的
数据处理与分析
2019/07/31
9.5K0
Python在日常中的使用

相似问题

Python3中的Pinging服务器

11

在python中Pinging网络设备

119

在C++中Pinging服务器

10

Python pinging本地IP

111

在Java中更快地Pinging服务器?

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档