我是张力流的新手。
实际上,我的问题是如何将每一行的最大值除以张量流中的两部分?
这是我想在numpy代码中做的事情的一个例子。
def concat_rows(matrix,separete_ids):
rows = []
for (each_row,sep_id) in zip(matrix,separete_ids):
s1 = np.max(each_row[:sep_id+1])
s2 = np.max(each_row[sep_id:])
rows.append([s1,s2])
return np.array(rows)
np_x = np.arange(20).reshape(4,5)
print np_x
np_s = np.array([2,1,0,3])
print np_s
print concat_rows(np_x,np_s)
我想使用tf.py_func,但我不知道渐变实现的想法。
答案 0 :(得分:0)
您可以使用map_fn
将最大/最小功能应用于每一行
def process_row(args):
"""Returns max value before sep_id and max value after sep_id in row"""
row = args[0]
sep_id = args[1]
return tf.stack([tf.reduce_max(row[:sep_id+1]), tf.reduce_max(row[sep_id:])])
array = tf.reshape(tf.range(20), (4, 5))
sepids = tf.constant([2,1,0,3], dtype=tf.int32)
sess = tf.InteractiveSession()
sess.run(tf.map_fn(process_row, (array, sepids), dtype=(tf.int32)))
这应该打印
array([[ 2, 4],
[ 6, 9],
[10, 14],
[18, 19]], dtype=int32)