Tensorflow:用最小值或最大值替换tensor中的所有值

Tensorflow:用最小值或最大值替换tensor中的所有值,tensorflow,Tensorflow,我想用最小的条目替换张量中的所有值: [1,-2,3,4,-4] -> [-4,-4,-4,-4,-4] 现在我正在做 x = tf.random_normal([1,5], mean=0.0, stddev=1.0, dtype=tf.float32) y = tf.reduce_min(x) + 0.0*x 有更好的方法吗?好吧,如果使用显式初始化而不是使用加法进行隐式广播,那么CPU和GPU的效率都会更高。见下面的基准。此代码(已测试): 将tensorflow导入为tf x=t

我想用最小的条目替换张量中的所有值:

[1,-2,3,4,-4] -> [-4,-4,-4,-4,-4]
现在我正在做

x = tf.random_normal([1,5], mean=0.0, stddev=1.0, dtype=tf.float32)
y = tf.reduce_min(x) + 0.0*x

有更好的方法吗?

好吧,如果使用显式初始化而不是使用加法进行隐式广播,那么CPU和GPU的效率都会更高。见下面的基准。此代码(已测试):

将tensorflow导入为tf
x=tf.random_normal([1,5],均值=0.0,标准差=1.0,数据类型=tf.float32)
y=tf.fill(tf.shape(x),tf.reduce_min(x))
使用tf.Session()作为sess:
res=sess.run([x,y])
对于res中的v:
印刷品(五)
将输出

[[-1.9890205-0.207912220.6901897 0.5605381 0.93578804]
[[-1.9890205-1.9890205-1.9890205-1.9890205-1.9890205]]

根据需要(数字是随机的,但第二行中第一行的最小值以相同的形状重复。)


基准 在我的本地计算机上,GPU上的原始版本用了0.305秒而CPU上的原始版本用了1.479秒,张量形状的
[10000,10000]
用了0.191秒而CPU上的原始版本用了1.923秒

该版本在CPU上的时间分别为0.082秒和0.610秒,在GPU上的时间分别为0.287秒和0.874秒

以下是我用于基准测试的代码:

将tensorflow导入为tf
导入时间
使用tf.device(“/gpu:0”):
#x和m是变量,首先计算,以便仅测量时间
#填充与广播操作
x=tf.变量(tf.random_normal([10000,10000],mean=0.0,stddev=1.0,dtype=tf.float32))
m=tf.变量(0.)
m_calc_op=tf.assign(m,tf.reduce_min(x))
y1=tf填充(tf形状(x),m)
y2=m+0.0*x
使用tf.Session()作为sess:
sess.run(tf.global\u variables\u initializer())
评估运行(m_calc_op)
#res=sess.run([y1,y2])#运行一次
开始=时间。时钟()
#对于X范围内的i(10):
res=sess.run([m,y1])
end=time.clock()
打印(结束-开始,“m=,res[0])
开始=时间。时钟()
#对于X范围内的i(10):
res=sess.run([m,y2])
end=time.clock()
打印(结束-开始,“m=,res[0])
注意,我注释掉了10倍的重复,因为它开始给出不合理的低值,可能有一些优化,如果输入没有改变,计算不会重新运行。我放大了张量