python中tensor与variable_tf.Variable和tensor的区别(转)

刷课过程中思考到Variable和Tensor之间的区别,尝试发现在如下代码中:

a = tf.Variable(tf.ones(1))

b = tf.add(a,tf.ones(1))

1

2

a是Variable,而b是Tensor。发现自己对Variable和Tensor之间的区分了解不多,所以搜索了一下,记录自己的思考,欢迎指教。

Variable是可更改的(mutable),而Tensor是不可更改的。一个直接的例子就是Tensor不具有assign函数,而Variable含有。

python和其他语言的API以及实现方式存在差异,本文只探讨general以及python方面的内容。

Variable用于存储网络中的权重矩阵等变量,而Tensor更多的是中间结果等。

Variable是会显示分配内存空间的(既可以是内存,也可以是显存),需要初始化操作(assign一个tensor),由Session管理,可以进行存储、读取、更改等操作。相反地,诸如Const, Zeros等操作创造的Tensor,是记录在Graph中,所以没有单独的内存空间;而其他未知的由其他Tensor操作得来的Tensor则是只会在程序运行中间出现。

Tensor可以使用的地方,几乎都可以使用Variable。

参考资料:

https://stackoverflow.com/questions/37849322/how-to-understand-the-term-tensor-in-tensorflow

https://stackoverflow.com/questions/40866675/implementation-difference-between-tensorflow-variable-and-tensorflow-tensor

https://stackoverflow.com/questions/38556078/in-tensorflow-what-is-the-difference-between-a-variable-and-a-tensor

https://www.tensorflow.org/programmers_guide/variables

https://www.tensorflow.org/api_docs/python/tf/Variable

---------------------

作者:silent56_th

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于输入的数据类型不匹配导致的。在 TensorFlow 2.x ,你需要使用 `tf.data.Dataset` 来处理输入数据。你可以将输入数据换成 `tf.data.Dataset` 格式,然后使用 `fit()` 函数来训练模型。下面是一个示例代码: ```python import tensorflow as tf import numpy as np # 加载数据集 mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 # 将数据换成 Dataset 格式 train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_dataset = train_dataset.shuffle(10000).batch(32) # 定义模型 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_dataset, epochs=5) # 生成对抗样本 epsilon = 0.1 x_adv = tf.Variable(x_test[:1000], dtype=tf.float32) y_true = tf.Variable(y_test[:1000], dtype=tf.int64) with tf.GradientTape() as tape: tape.watch(x_adv) y_pred = model(x_adv) loss = tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred) grad = tape.gradient(loss, x_adv) normed_grad = tf.sign(grad) x_adv = x_adv + epsilon * normed_grad # 评估模型在对抗样本上的性能 test_dataset = tf.data.Dataset.from_tensor_slices((x_adv, y_true)) test_dataset = test_dataset.batch(32) model.evaluate(test_dataset) ``` 在这个示例代码,我们将输入数据换成了 `tf.data.Dataset` 格式,并使用 `fit()` 函数来训练模型。在生成对抗样本时,我们同样将数据换成了 `tf.data.Dataset` 格式,并使用 `evaluate()` 函数来评估模型在对抗样本上的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值