Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x keras-tensorflow中函数的实现_Python 3.x_Tensorflow_Keras - Fatal编程技术网

Python 3.x keras-tensorflow中函数的实现

Python 3.x keras-tensorflow中函数的实现,python-3.x,tensorflow,keras,Python 3.x,Tensorflow,Keras,假设我有三个张量形状(n,1)T,r,E,我想实现一个函数来计算:sum(I,j)(T[j]r[I])E[j]。 我怎样才能继续 这就是我得到的 #张量示例 T=K.常数([1,4,5]) r=K.常数([.8、.3、.7]) E=K.常数([1,0,1]) #T的笛卡尔积用于比较元素 c=tf.stack(tf.meshgrid(T,T,index='ij'),轴=-1) 笛卡尔函数T=tf.重塑(c,(-1,2)) #r的笛卡尔积比较元素 r=tf.stack(tf.meshgrid(r,r

假设我有三个张量形状
(n,1)T,r,E
,我想实现一个函数来计算:
sum(I,j)(T[j]r[I])E[j]
。 我怎样才能继续

这就是我得到的

#张量示例
T=K.常数([1,4,5])
r=K.常数([.8、.3、.7])
E=K.常数([1,0,1])
#T的笛卡尔积用于比较元素
c=tf.stack(tf.meshgrid(T,T,index='ij'),轴=-1)
笛卡尔函数T=tf.重塑(c,(-1,2))
#r的笛卡尔积比较元素
r=tf.stack(tf.meshgrid(r,r,index='ij'),轴=-1)
笛卡尔函数r=tf.重塑(r,(-1,2))
#要做:
#比较笛卡尔T和cast中的两列,如果
#T中的第二列小于/大于T=>返回张量中的第一列
#比较笛卡尔E和cast中的两列,如果
#r中的第二列大于/小于r=>返回张量中的第一列
#将之前的张量乘以广播版本的E,然后进行K.求和()
你认为我走对了吗?您有什么建议来实现这一点?

试试:

import keras.backend as K
import tensorflow as tf

T=K.constant([1,4,5])
r=K.constant([.8,.3,.7])
E=K.constant([1,0,1])

T_new = tf.less(T[tf.newaxis,:],T[:,tf.newaxis])
r_new = tf.greater(r[tf.newaxis,:],r[:,tf.newaxis])
E_row,_ = tf.meshgrid(E, E)
result = tf.reduce_sum(tf.boolean_mask(E_row,tf.logical_and(T_new,r_new)))

with tf.Session() as sess:
    print(sess.run(result))

#print
2.0

你期望什么样的产出
n*1
n*n
应该是一个双精度。当
T=[1,4,5]
r=[8,3,7]
E=[1,0,1]
时,您能否给出示例中预期的输出。我期望2.0!伟大的这就是它!非常感谢@JuanCastaño如果没有问题,请接受答案。我已经实现了该功能;然而,当张量很大时,它会破坏记忆;你有没有想到一个更具性能的实现?@JuanCastaño更新后的代码呢?但我认为最好的方法是减少批量大小。@JuanCastaño您是否使用
tf.placeholder
来提供数据?