TensorFlow-重新学习第1天

温故

TensorFlow 2.x的封装度比TensorFlow 1.x高了很多。由于太长时间没有写过TensorFlow相关的代码,很多知识点有些遗忘,因此比照着官方文档,重新学习一下。

通过代码学习

! -*- coding: utf-8 -*-
"""
TensorFlow 1.x
## 几个概念
1. 张量
2. 变量
3. 占位符
4. 节点
5. 图
6. 会话
"""
import tensorflow.compat.v1 as tf

# Warning: TF > 1.3 才有eager模型
# TF 2.x默认开启此模式,开启此模式时
# 无需使用tf.Session()
# 检测当前是否开启eager模式
# 如果开启,则关闭eager模型
if tf.executing_eagerly():
    tf.disable_eager_execution()

# 开启eager
#tf.enable_eager_execution()

# 设置GPU使用资源
## 更具GPU使用情况为其增加GPU内存占用
gpu_options = tf.GPUOptions(allow_growth=True)
config = tf.ConfigProto(
        allow_soft_placement=False, # 如果指定的设备不存在,不允许TF自动分配设备
        log_device_placement=False, # 不打印设备分配日志
        gpu_options=gpu_options)

# 张量
## 创建张量
a1 = tf.constant(value=1, shape=None, dtype=tf.float32, name='a1')
b1 = tf.constant(value=2, shape=None, dtype=tf.float32, name='b1')
c1 = tf.add(a1, b1, name='c1')

# 图
## 获取默认图
default_g = tf.get_default_graph()
print("\033[1;31mDefault graph: %s\033[0m" % default_g)
"""
Default graph: 
"""

## 获取`c1`所在的图,从结果可以看出,常量`c1`在默认图中
print("\033[1;31mconstant c1 in graph: %s\033[0m" % c1.graph)
"""
constant c1 in graph: 
"""

## Session(target='', graph=None, config=None)
## 如果Session不指定graph,则使用默认的Graph
with tf.Session(config=config) as sess:
    fetch_c = sess.run(c1)
    print("\033[1;31mc1 result: %f\033[0m" % fetch_c)
    """
    c1 result: 3.000000
    """

## 创建新的图
g = tf.Graph()

## 使用新的图作为默认图
with g.as_default():
    a2 = tf.constant(value=1, shape=None, dtype=tf.float32, name='a2')
    b2 = tf.constant(value=2, shape=None, dtype=tf.float32, name='b2')
    c2 = tf.add(a2, b2, name='c2')

    # 获取`c2`所在的图,从结果可以看出,常量`c2`在新的默认图中了
    print("\033[1;31mconstant c2 in graph: %s\033[0m" % c2.graph)
    """
    constant c2 in graph: 
    """

## Session指定Graph
with tf.Session(graph=g, config=config) as sess:
    fetch_c = sess.run(c2)
    print("\033[1;31m c2 result: %f\033[0m" % fetch_c)
    """
    c2 result: 3.000000
    """

# 变量
## 可改变的量,主要用作参数,可学习
x1 = tf.Variable(initial_value=1,
        trainable=True,
        name='x1',
        dtype=tf.float32)
y1 = tf.Variable(initial_value=2,
        trainable=True,
        name='y1',
        dtype=tf.float32)
z1 = tf.multiply(x1, y1, name='z1')

# 两个变量和一个操作都在默认图中
print("\033[1;31m x1 result: {}, graph: {}\033[0m".format(x1, x1.graph))
print("\033[1;31m y1 result: {}, graph: {}\033[0m".format(y1, y1.graph))
print("\033[1;31m z1 result: {}, graph: {}\033[0m".format(z1, z1.graph))
"""
x1 result: , graph: 
y1 result: , graph: 
z1 result: Tensor("z1:0", shape=(), dtype=float32), graph: 
"""

with tf.Session(config=config) as sess:
    # 变量需要初始化
    sess.run(tf.global_variables_initializer())
    print("\033[1;31m x1 result: {}\033[0m".format(x1))
    print("\033[1;31m y1 result: {}\033[0m".format(y1))
    print("\033[1;31m z1 result: {}\033[0m".format(z1))
    """
    x1 result: 
    y1 result: 
    z1 result: Tensor("z1:0", shape=(), dtype=float32)
    """

# 占位符
hx = tf.placeholder(dtype=tf.float32, name='hx')
hy = tf.placeholder(dtype=tf.float32, name='hy')
hz = tf.multiply(hx, hy, name='hz')
with tf.Session() as sess:
    result = sess.run(hz, feed_dict={hx: 2.0, hy: 3.0})
    print('placeholder result: {}'.format(result))
    """
    z1 result: Tensor("z1:0", shape=(), dtype=float32)
    """

你可能感兴趣的:(编程语言-Python)