将张量流操作应用于张量列表

时间:2018-06-05 19:32:26

标签: python tensorflow

我尝试使用不同翻译之间的余弦相似性来学习单词嵌入。 x1是英语句子中单词的嵌入。 x2是正确的Inuktitut翻译中的单词嵌入。 x3是错误的Inuktitut翻译中的单词嵌入。我试图最大化x1x2之间的余弦相似度,并在x1x3之间将其最小化。有很多三连串的句子,我必须这样做。我目前的培训功能如下:

def train(self):
        for epoch in range(self.epochs):
            total_loss = 0
            for x1, x2, x3 in zip(self.x1_list, self.x2_list, self.x3_list):
                norm1 = tf.norm(x1, axis=1)
                norm2 = tf.norm(x2, axis=1)
                norm3 = tf.norm(x3, axis=1)
                cos1 = tf.matmul(x1, x2, transpose_b=True) / norm2
                cos1 = tf.transpose(tf.transpose(cos1) / norm1)
                cos2 = tf.matmul(x1, x3, transpose_b=True) / norm3
                cos2 = tf.transpose(tf.transpose(cos2) / norm1)
                loss = tf.reduce_mean(cos2) - tf.reduce_mean(cos1)
                optimizer = tf.train.AdamOptimizer(learning_rate=self.eta).minimize(loss)
                self.session.run(tf.global_variables_initializer())
                _, loss = self.session.run([optimizer, loss])
                total_loss += loss
            if epoch % 5 == 0 or epoch == self.epochs-1:
                print("Epoch {}: loss = {}".format(epoch, total_loss))

我不想在每次循环迭代中重新创建所有tensorflow操作,但由于x1x2x3是变量,我可以' t使用占位符。有没有办法将这些操作应用于可变张量列表?

0 个答案:

没有答案