tensorflow 1.X迁移至tensorflow2 的代码写法

目录
  • 目标:代码改写成tf2格式
  • tf1和tf2区别:
  • 改写内容:
    • tf.placeholder
    • tf.Sess,sess.run
  • 具体例子1:
  • 结论:

目标:代码改写成tf2格式

把tensorflow 1.X中的代码,迁移到tensorflow2中。一些常见的改写经验。包括sess,tf.placeholder, tf.InteractiveSession(),tf.Session()
tensorflow2相比于tensorflow 1.x版本有较大的变化,且网上现在好多文章的代码都是基于tf1.x版本的,学会简单的转换,帮助我们看代码。
整体来说,tensorflow2更加简洁了。
本文将持续更新中。

当然用tf.compat.v1也能解决部分问题。但是不推荐,毕竟tf2才是未来。

tf1和tf2区别:

1、tf1基于图模式,tf2基于eager模式,tf2对程序员更友好,更像是函数,更方便调试。

2、tf2更向keras靠拢,对分布式训练的支持更好。

改写内容:

tf.placeholder

tensorflow 1.x版本中的placeholder,在tf2中已经被取消,在tf2中,可以用tf.keras.Inputs代替。
示例:
tf1中

input_ids = tf.placeholder(dtype=tf.int32, shape=[None])

tf2中,改写为:

input_ids = tf.keras.Input(dtype=tf.int32, shape=[None])

tf.Sess,sess.run

  • tensorflow 1.x由于是基于静态图机制(Graph Execution),需要先构造图,然后才真正运行,因此需要用显示调用Session后,才会真正触发计算。对调试代码非常不利。
  • tensorflow 2.x默认是基于动态图机制(Eager Execution),就像常规函数一样,调用时就触发计算。对调试代码非常方便。

所以,tf1中session部分代码,可以全部去掉。

示例:

tf1中

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())

tf2中,改写为:直接不要

具体例子1:

tf1的代码:

import tensorflow as tf
import numpy as np

# 定义一个未知变量input_ids用于存储索引
input_ids = tf.placeholder(dtype=tf.int32, shape=[None])

# 定义一个已知变量embedding,是一个5*3的矩阵
embedding = a = np.asarray([[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]])

# 根据input_ids中的id,查找embedding中对应的元素
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
# print(embedding.eval())
print(sess.run(input_embedding, feed_dict={input_ids: [1, 2, 3, 0, 3, 2, 1]}))

改写tf2代码:

import tensorflow as tf
import numpy as np

# 定义一个未知变量input_ids用于存储索引
input_ids = tf.keras.Input(dtype=tf.int32, shape=[None])

# 定义一个已知变量embedding,是一个5*3的矩阵
embedding = a = np.asarray([[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]])

input_ids = np.array([1, 2, 3, 0, 3, 2, 1])
# 根据input_ids中的id,查找embedding中对应的元素
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)
print(input_embedding)

可见,tf2代码简洁明了不少,多动手试试,就能体会。

结论:

深刻体会tf2带来的变革。
1、体会静态图和动态图的差别
2、体会对分布式训练的优化(未来写)
3、体会模型训练的便利性(直接用compile等,keras的便利性。)

到此这篇关于tensorflow 1.X迁移至tensorflow2 的代码写法的文章就介绍到这了,更多相关tensorflow 1.X迁移至tensorflow2  内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解tensorflow实现迁移学习实例

    本文主要是总结利用tensorflow实现迁移学习的基本步骤. 所谓迁移学习,就是将上一个问题上训练好的模型通过简单的调整使其适用于一个新的问题.比如说,我们可以保留训练好的Inception-v3模型中所有的参数,只替换最后一层全连接层.在最后一层全连接层之前的网络称之为瓶颈层(bottleneck). 持久化 首先需要简单介绍下tensorflow中的持久化:在tensorflow中提供了一个非常简单的API来保存和还原一个神经网络模型,这个API就是tf.train.Saver类.当采用该

  • tensorflow 1.X迁移至tensorflow2 的代码写法

    目录 目标:代码改写成tf2格式 tf1和tf2区别: 改写内容: tf.placeholder tf.Sess,sess.run 具体例子1: 结论: 目标:代码改写成tf2格式 把tensorflow 1.X中的代码,迁移到tensorflow2中.一些常见的改写经验.包括sess,tf.placeholder, tf.InteractiveSession(),tf.Session() tensorflow2相比于tensorflow 1.x版本有较大的变化,且网上现在好多文章的代码都是基于

  • Tensorflow卷积实现原理+手写python代码实现卷积教程

    从一个通道的图片进行卷积生成新的单通道图的过程很容易理解,对于多个通道卷积后生成多个通道的图理解起来有点抽象.本文以通俗易懂的方式讲述卷积,并辅以图片解释,能快速理解卷积的实现原理.最后手写python代码实现卷积过程,让Tensorflow卷积在我们面前不再是黑箱子! 注意: 本文只针对batch_size=1,padding='SAME',stride=[1,1,1,1]进行实验和解释,其他如果不是这个参数设置,原理也是一样. 1 Tensorflow卷积实现原理 先看一下卷积实现原理,对于

  • PHP中CheckBox多选框上传失败的代码写法

    用惯Java和其他语言的时候,表单上传只需要checkbox的name相同的时候就可以上传了 <input type="checkbox" name="checkbox" value="1"> 选项 <input type="checkbox" name="checkbox" value="2"> 选项 <input type="checkbox&

  • 浅谈vue单页面中有多个echarts图表时的公用代码写法

    html中: <div class="charts1"/> <div class="charts2"/> <div class="charts3"/> <div class="charts4"/> <div class="charts5"/> <div class="charts6"/> <div class=

  • until封装watch常用逻辑简化代码写法

    目录 引言 1.示例 2.源码 2.1 toMatch 2.2 toBe 2.3 toBeTruthy.toBeNull.toBeUndefined.toBeNaN 2.4 toContains 2.5 changed和changedTimes 2.6 until返回值——instance 3.总结 引言 在之前的系列文章中我们介绍了vueuse对watch封装的一系列方法,以便我们可以更高效的开发.有对回调进行控制的watchWithFilter,有适用于当watch的值为真值时触发回调的wh

  • Python+Tensorflow+CNN实现车牌识别的示例代码

    一.项目概述 本次项目目标是实现对自动生成的带有各种噪声的车牌识别.在噪声干扰情况下,车牌字符分割较困难,此次车牌识别是将车牌7个字符同时训练,字符包括31个省份简称.10个阿拉伯数字.24个英文字母('O'和'I'除外),共有65个类别,7个字符使用单独的loss函数进行训练. (运行环境:tensorflow1.14.0-GPU版) 二.生成车牌数据集 import os import cv2 as cv import numpy as np from math import * from

  • 用TensorFlow实现多类支持向量机的示例代码

    本文将详细展示一个多类支持向量机分类器训练iris数据集来分类三种花. SVM算法最初是为二值分类问题设计的,但是也可以通过一些策略使得其能进行多类分类.主要的两种策略是:一对多(one versus all)方法:一对一(one versus one)方法. 一对一方法是在任意两类样本之间设计创建一个二值分类器,然后得票最多的类别即为该未知样本的预测类别.但是当类别(k类)很多的时候,就必须创建k!/(k-2)!2!个分类器,计算的代价还是相当大的. 另外一种实现多类分类器的方法是一对多,其为

  • PHP中几个可以提高运行效率的代码写法、技巧分享

    废话不多说,直接看代码示例. 一.遍历数组 在遍历数组中注意count的使用次数,不要每次都去计算数组长度 效率慢的写法 复制代码 代码如下: <?php   $array = array(1,2,3,4,5,6,7,8,9,10,....); for($i=0;$k<count($array);$i++){     echo $array[$i]; }   ?> 效率快的写法 复制代码 代码如下: <?php   $array = array(1,2,3,4,5,6,7,8,9,

  • 第二章 PHP入门基础之php代码写法

    一.在web页面嵌入PHP代码的几种风格 推荐使用标准风格或简短风格 复制代码 代码如下: <?php //标准风格 echo 'Hello World!'; ?> <? //简短风格 echo 'Hello World!'; ?> <script language="php"> //script风格 echo 'Hello World!'; </script> 二.代码注释的四种方式 复制代码 代码如下: <?php //单行注释

  • 今天是星期几的4种JS代码写法

    第一种写法 复制代码 代码如下: var str = "";  var week = new Date().getDay();  if (week == 0) {          str = "今天是星期日";  } else if (week == 1) {          str = "今天是星期一";  } else if (week == 2) {          str = "今天是星期二";  } else

随机推荐