tensorflow 学习笔记之 变量的一些操作

部分内容参考了其他资源,谢谢。

1、 区别

使用tf.Variable()时,如果系统检测到重名,会做自动处理,不会报错。

import tensorflow as tf
w_1 = tf.Variable(3,name="w")
w_2 = tf.Variable(1,name="w")
print(w_1.name)
print(w_2.name)

运行结果:
这里写图片描述

使用tf.get-variable()时,会报错。

import tensorflow as tf
w_1 = tf.get_variable(name = 'w', initializer = 1)
w_2 = tf.get_variable(name = 'w', initializer = 2)
print(w_1.name)
print(w_2.name)

错误如图所示

2、tensorflow 赋值操作

若需要给TensorFlow的变量赋值,可以使用 tf.assign()
tf.assign(ref, value, validate_shape=None, use_locking=None, name=None)
将值赋值给 ref 后再返回 ref

import tensorflow as tf;
A = tf.Variable(tf.constant(0.0), dtype=tf.float32)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(A))
    sess.run(tf.assign(A, 10))
    print(sess.run(A))

运行结果如下:
执行session会话后,A的值一开始为0.0,随后执行assign操作,变成10。

3、TensorFlow创建变量

import tensorflow as tf
weights = tf.Variable(tf.random_normal([784,200], stddev = 0.35), name = 'weights')
bias = tf.Variable(tf.zeros([200]), name = 'biase')
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(bias))
    print(weights.eval())

上面的代码中sess.run(bias) 与 bias.eval() 是一样的。
如果直接用 print(weights) ,则打印的结果是 weight 的 shape ,
这里写图片描述
这里写图片描述

4、tf.placeholder()

只是一个占位符,占位符并没有初始值,只是在必要时分配内存,
在TensorFlow中,数据并不会保存为 integer, float, 或 string. 这些值都封装在 tensor 对象中,因此不能直接定义并使用一个变量例如x,因为你设计的模型可能需要受不同的数据集与不同的参数。所以TF使用placeholder()来传递一个tensor到session.run()中,并与feed_dict{}结合一起使用。
feed_dict{}是一个字典,在字典中需要给每一个用到的占位符取值。在训练神经网络时,需要大批量的训练样,如果每一次迭代选取的数据都需要常量表示,那么TensorFlow的计算图会非常大。因为每计算一个常量 ,TensorFlow会增加一个结点,所以说,拥有几百万次迭代的神经网络会拥有庞大的计算图,如果使用占位符的话,就可以很好的解决这一点,它只会拥有占位符这一个结点。

import tensorflow as tf
import numpy as np

x = tf.placeholder(tf.string)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    output = sess.run(x, feed_dict={x: 'Hello World'})
    print(output)

这里写图片描述

import tensorflow as tf
import numpy as np

w1=tf.Variable(tf.random_normal([1,2],stddev=1,seed=1))

#因为需要重复输入x,而每建一个x就会生成一个结点,计算图的效率会低。所以使用占位符
x=tf.placeholder(tf.float32,shape=(1,2))
x1=tf.constant([[0.7,0.9]])

a=x+w1
b=x1+w1

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

#运行y时将占位符填上,feed_dict为字典,变量名不可变
y_1=sess.run(a,feed_dict={x:[[0.7,0.9]]})
y_2=sess.run(b)
print(sess.run(w1))
print(y_1)
print(y_2)
sess.close

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在神经网络训练完成后,我们可以使用模型对新的输入数据进行预测。以下是使用 TensorFlow 进行简单神经网络训练和测试的示例代码: ```python import tensorflow as tf # 定义输入数据 x = tf.placeholder(tf.float32, [None, input_size]) # 定义模型参数 W = tf.Variable(tf.zeros([input_size, num_classes])) b = tf.Variable(tf.zeros([num_classes])) # 定义模型 y = tf.nn.softmax(tf.matmul(x, W) + b) # 定义损失函数 y_ = tf.placeholder(tf.float32, [None, num_classes]) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) # 定义优化器 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(num_iterations): batch_xs, batch_ys = get_next_batch(train_data, train_labels, batch_size) sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) # 测试模型 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print("Accuracy: ", sess.run(accuracy, feed_dict={x: test_data, y_: test_labels})) ``` 在训练完成后,我们可以使用 `sess.run()` 函数来获取模型的输出。例如,如果我们想要对一个新的数据样本进行预测,我们可以将其传递给 `sess.run()` 函数的 `feed_dict` 参数,并获取模型的输出 `y`。下面是一个简单的示例: ```python # 定义要预测的数据 new_data = [[5.1, 3.5, 1.4, 0.2]] # 获取预测结果 prediction = sess.run(y, feed_dict={x: new_data}) # 打印预测结果 print(prediction) ``` 在上面的代码中,我们将 `new_data` 作为输入数据传递给模型,并使用 `sess.run()` 函数获取模型的输出 `y`。然后,我们打印预测结果即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值