Tensorflow -- 数据操作

本文详细介绍了TensorFlow中的数据操作流程,包括变量定义、初始化、计算图构建及Session使用等核心概念。通过实例演示了变量操作、矩阵运算及变量更新等常见任务。
部署运行你感兴趣的模型镜像

Tensorflow – 数据操作

tensorflow的数据操作有着一个固定的模式,它先定义变量,操作,然后创建计算图,在图里计算:
如下面的:
1、定义变量、操作(其实也是理解为生成新的变量),此时即使定义时赋值了,变量还是没有值的,是在创建session计算的时候,首先就得变量初始化,赋值操作。
2、创建Session,然后将变量或者操作放入session中计算(run)

  1. 数据只在Session内有效。run函数里只能是操作,比如矩阵相乘(或者是前面的变量所代表的操作),或者一些zeros初始化变量等操作,不能是tf.Variable() 定义的变量
  2. 所有 Variable()定义的变量,在session中使用时,需要初始化.session.run(tf.global_variables_initializer())

3、定义的一些操作,要在seesion中run或者调用才会执行(在run里面可以用 上面定义的“操作”前面变量当作参数),总之要明白,上面只是定义的变量和操作,真正执行的是在session里面,且数据的生命期也是在本seesion里。

下面这个例子体现了,上面定义的是变量和操作,在session外变量是没有值的,
1、在session里 run了变量初始化后w、x才有值,
2、后面在打印y的值 y.eval()时候,y也赋值了。

import tensorflow as tf

# create a varibale  创建变量、操作(矩阵相乘)
w = tf.Variable([[1, 2]])
x = tf.Variable([[2, 4], [3, 5]])
y = tf.matmul(w, x)

# 这时候y还没有值,这里只是定义了操作
print(y)
# 变量初始化操作,初始化所有定义的数据,既计算所有的操作
init_op = tf.global_variables_initializer()
# 初始化,所有变量的计算需要在session中初始化,初始化后才有值,打印值需要eval()
with tf.Session() as sess:
    sess.run(init_op)
    print(y.eval())

# 下面打印出错,结果只在session内有数据
# print(y.eval()) 

下面是一个简单的对a加一操作的例子,虽然简单,但也能体现:
1、只有Variable定义的变量需要初始化,
2、当定义的其他操作或者变量也用到了Variable的时候才需要对初始化tf.global_variables_initializer()
3、session.run(update_a)aupdate_a.eval() 效果相同,但设计多个session时用run
4、打印当前变量结果,也可使用print(sess.run(a)),如过是操作,最好不要这么用,会多一次改变其他变量的值(如打印print(sess.run(update_a)) 只是为了看结果,则让a的值多加一次1)

import tensorflow as tf

a = tf.Variable(1)
b = tf.ones([2, 3], tf.int32)
new_a = tf.add(a, tf.constant(1))
update_a = tf.assign(a, new_a)
with tf.Session() as sess:
    # b没有用到variable变量不需初始化操作
    print("----b---")
    print(b.eval())
    print("----a---")
    sess.run(tf.global_variables_initializer())
    print(a.eval())
    print("----a- sess.run(update_a)--")
    sess.run(update_a)
    print(a.eval())
    print("----a- update_a.eval()--")
    # 这里通 sess.run(update_a),如果直接写update_a,则a不会加一
    update_a.eval()
    print(a.eval())
    print("------c-------")
    # 这里操作c只是定义了操作(与update_a相同),并不会更新a的值
    c = tf.assign(a, new_a)
    print(a.eval())
    # 下面执行c.eval()则会执行c操作,a的值才会加一
    print(c.eval())
    print(a.eval())
"""
    执行结果:
        ----b---
        [[1 1 1]
         [1 1 1]]
        ----a---
        1
        ----a- sess.run(update_a)--
        2
        ----a- update_a.eval()--
        3
        ------c-------
        3
        4
        4
"""

tensorflow定义了变量,只能说在计算用到的时候才会真正对变量赋值,并执行赋值附带的操作。

常用的一些函数,

与numpy类似,tensorflow的一些数据操作比较相似,并且可以相互转化(不建议)
为了节约时间直接传图得了:
最后2个解释一下都是在区间内平均取值,前面的第三个参数是个数,第二个函数是间隔

这里写图片描述

numpy转化为tensorflow
这里写图片描述

placeholder用法
先占据位置,在session中赋值,进行操作

这里写图片描述

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### 配置和使用 Tensorflow-CPU 与 TensorFlow-DirectML-Plugin 为了配置并使用 `tensorflow-cpu` 和 `TensorFlow-DirectML-Plugin` 来进行深度学习模型训练,需遵循特定的安装流程以及环境设置。 #### 安装依赖项 确保环境中已正确安装 Python 版本,并建议创建一个新的虚拟环境来管理项目所需的包。这有助于避免不同版本之间的冲突[^3]。 ```bash python -m venv directml_env source directml_env/bin/activate # Linux or macOS directml_env\Scripts\activate # Windows ``` #### 安装 TensorFlow CPU 及 DirectML 插件 按照官方指导文档中的说明,先安装兼容版本的 `tensorflow-cpu`,再安装 `tensorflow-directml-plugin`: ```bash pip install tensorflow-cpu==2.10 pip install tensorflow-directml-plugin ``` 上述命令会下载并安装指定版本的 TensorFlow CPU 库及其对应的 DirectML 加速插件。 #### 设置环境变量 (可选) 某些情况下可能需要调整系统的环境路径以支持 DirectML 的正常工作。具体操作取决于操作系统类型和个人偏好。通常来说,默认配置已经足够满足大多数需求[^2]。 #### 编写代码示例 下面是一个简单的例子展示如何加载数据集、定义模型结构并通过 GPU 或者集成显卡加速来进行训练过程: ```python import tensorflow as tf from tensorflow.keras import layers, models # 检查是否能够检测到 DirectML 设备 physical_devices = tf.config.experimental.list_physical_devices('DML') print("Detected DML devices:", physical_devices) # 构建简单卷积神经网络模型 model = models.Sequential([ layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)), layers.MaxPooling2D(pool_size=(2, 2)), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dropout(0.5), layers.Dense(10, activation='softmax') ]) # 使用 MNIST 数据集作为测试样本 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255. x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255. # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) # 开始训练 history = model.fit(x=x_train, y=y_train, epochs=5, validation_split=0.2) ``` 此脚本会在控制台输出可用的 DirectML 设备信息,并尝试通过这些设备执行计算任务。如果一切顺利,则可以观察到性能上的显著提升。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值