如何为shape含None的TensorFlow张量添加tf.random生成的随机噪声
TensorFlow动态形状张量添加随机噪声解决方案
错误根因
- 代码中
x.get_shape是未调用的方法对象,直接传入参数触发类型不匹配错误 - 即使修正为
x.get_shape(),返回的静态形状包含编译期无法确定的None占位值,无法被随机张量生成函数识别
修复方案
使用tf.shape(x)获取张量的运行时动态形状,该API返回的张量会在执行阶段自动匹配输入的实际维度,完美适配带None的动态形状场景。
修正后代码
x = tf.placeholder(tf.float32, (None, 2)) # 传入动态形状生成同尺寸随机噪声 noise = tf.random_uniform(shape=tf.shape(x)) x_with_noise = x + noise
效果验证
with tf.Session() as sess: # 可传入任意第一维长度的输入 test_val = [[1,2], [3,4], [5,6], [7,8]] output = sess.run(x_with_noise, feed_dict={x: test_val}) print(output.shape) # 输出 (4, 2),和输入形状完全一致
本方案同时适配TensorFlow 1.x和2.x版本,2.x场景下无需占位符,直接对动态张量调用
tf.shape生成噪声即可。
内容的提问来源于stack exchange,提问作者xuefeng jin
相关产品推荐
相关产品推荐

