建设部网站一级建造师报名,网页设计实训总结50字,h开头的网页设计软件,上海外贸建站商城张量和array一样可以通过切片获取#xff0c;但是张量不可以直接修改某个值。 可以理解为张量具有“只读”的模式。
如果按照数组修改某个值的方式处理的话#xff0c;会报错#xff1a;
import tensorflow as tf
tensor_1 tf.constant([x for x in range(1,10)])
tensor…张量和array一样可以通过切片获取但是张量不可以直接修改某个值。 可以理解为张量具有“只读”的模式。
如果按照数组修改某个值的方式处理的话会报错
import tensorflow as tf
tensor_1 tf.constant([x for x in range(1,10)])
tensor_1[4] 0 # TypeError: Tensor object does not support item assignment
解决方法 将张量切片再拼接。比如
tensor_1 tf.constant([x for x in range(1,10)])
# 切片
part1 tensor_1[:4]
part2 tf.constant([0]) # 要修改的元素
part3 tensor_1[5:]
# 拼接
new_tensor tf.concat([part1,part2,part3], axis0)
值得注意的一点如果在进行这样的操作的时候代码报错记得检查每个 part 的维度大概率是维度这里出了问题。 牢记原来张量是几维最后要拼成几维。比如你的张量是3维的先要切分成三个2维的再将二维张量切成1维修改拼接成2维再拼接成3维
下面举一个三维拼接的例子
import tensorflow as tf
import numpy as npclass tttest():def __init__(self):self.tensor_1 tf.placeholder(tf.int32, [None, 3])self.part1 self.tensor_1[:3]self.part2 self.tensor_1[3]self.part2_1 self.part2[:1]self.part2_2 tf.constant([10])self.part2_3 self.part2[2:]self.part2 tf.expand_dims(tf.concat([self.part2_1, self.part2_2, self.part2_3], axis0),0)self.part3 self.tensor_1[4:]self.t tf.concat([self.part1, self.part2, self.part3], axis0) # 这样写是正确的# self.tensor_1 tf.concat([self.part1, self.part2, self.part3], axis0) # 这样会报错with tf.Session() as sess:init tf.global_variables_initializer()sess.run(init)fd np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]])a tttest()print(tensor_1, sess.run(a.part1, {a.tensor_1:fd}))print(tensor_2, sess.run(a.part2, {a.tensor_1:fd}))print(tensor_3, sess.run(a.part3, {a.tensor_1:fd}))print(tensor_3, sess.run(a.t, {a.tensor_1: fd}))
其中如果将修改后的值还是赋给 tensor_1 会报错如下
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor Placeholder with dtype int32 and shape [?,3][[Node: Placeholder Placeholder[dtypeDT_INT32, shape[?,3], _device/job:localhost/replica:0/task:0/device:CPU:0]()]]
关于placeholder需要注意的是不可以重新赋值给placeholder类型的因为这样会使得 feedfic 的时候 tensorflow 找到两个名字一样但是一个是 placeholder 类型一个不是必然会报错。