Tensorflow 如何有效地处理整批张量?

Tensorflow 如何有效地处理整批张量?,tensorflow,Tensorflow,我想处理两批:a和b以及产品c。批量大小为1000。 每个元素ci都是ai和bi的契约结果。合同操作由我自己定义。 但我不确定这是否是一种有效的方法?有什么简单的方法吗?谢谢。我认为您想要实现的目标只需: 将tensorflow导入为tf 使用tf.variable_scope(“实验”): a=tf.get_变量('a',[1000,24,128],dtype=tf.float32, 初始值设定项=tf.随机\正常\初始值设定项(stddev=0.1)) b=tf.get_变量('b',[10

我想处理两批:a和b以及产品c。批量大小为1000。 每个元素ci都是ai和bi的契约结果。合同操作由我自己定义。
但我不确定这是否是一种有效的方法?有什么简单的方法吗?谢谢。

我认为您想要实现的目标只需:

将tensorflow导入为tf
使用tf.variable_scope(“实验”):
a=tf.get_变量('a',[1000,24,128],dtype=tf.float32,
初始值设定项=tf.随机\正常\初始值设定项(stddev=0.1))
b=tf.get_变量('b',[1000,15,128],dtype=tf.float32,
初始值设定项=tf.随机\正常\初始值设定项(stddev=0.1))
c=tf.matmul(a,tf.transpose(b,(0,2,1)))
#由于Python3.5,您还可以
#c=a@tf.转置(b,(0,2,1))
印刷品(c.shape)
#张量形状([尺寸(1000)、尺寸(24)、尺寸(15)])
#测试并计算值
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
c_值=sess.run(c)
打印(c_值.形状)
# (1000, 24, 15)

contract\u fun
只是
aii
bii
转置的矩阵积吗?
with tf.Session() as sess:
    with tf.variable_scope('experiment'):
        a = tf.get_variable('a', [1000,24,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
        b = tf.get_variable('b', [1000,15,128], dtype=tf.float32, initializer=tf.random_normal_initializer(stddev=0.1) )
        c = tf.get_variable('c', [1000,24,15], dtype=tf.float32,  initializer=tf.random_normal_initializer(stddev=0.1))
        for i in range(1000):
            ai = tf.slice(a,[i,0,0],[1,-1,-1]) # (1,24,128)
            bi = tf.slice(b,[i,0,0],[1,-1,-1]) # (1,15,128)
            aii = tf.reshape(ai, [ int(ai.get_shape()[1]), int(ai.get_shape()[2])] ) # (24, 128)
            bii = tf.reshape(bi, [ int(bi.get_shape()[1]), int(bi.get_shape()[2])] ) # (15, 128)
            ci = contract_func(aii,bii) # (24,15)
            c[i] = ci