【问题标题】:Initializing square matrix in batches批量初始化方阵
【发布时间】:2020-07-09 01:40:04
【问题描述】:

任务是执行一个大小为 (87236 x 1) 的向量和一个大小为 (87236 x 87236) 的下三角矩阵相乘。

由于下三角形的尺寸非常大,我无法初始化它。

我遇到了tf.linalg.LinearOperationLowerTriangular() 运算符,它忽略了矩阵的上三角部分。以下是我尝试过的结果:

tril = tf.ones((4, 21809 , 21809)) 
lmt = tf.linalg.LinearOperatorLowerTriangular(tril)
x = tf.random.normal((87236, 1))
x = tf.reshape(x , (4, 21809,1))

lmt.matmul(x)

按照我得到的错误:

tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM 
when allocating tensor with shape[4,21809,21809] and type float on 
/job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc 
[Op:MatrixBandPart]

您能否建议我如何有效地执行此任务?我想分批执行它是解决方案,但是如何分批初始化下三角矩阵?

【问题讨论】:

    标签: python tensorflow tensorflow2.0 matrix-multiplication


    【解决方案1】:

    如果您只想将两个不同的矩阵相乘,请尝试使用:

    class Matrices:
        def __init__(self, matrix):
            self.matrix = matrix
            self.rows = len(self.matrix)
            self.columns = len(self.matrix[0])
    
        def multiply_matrices(self, other):
            """multiples 2 matrices together"""
            assert self.columns == other.rows, "Multiplying matrix rules not met"  # remove this line
            new_matrix_dimensions = (self.rows, other.columns)
            new_matrix = list()
                for a in range(self.rows):
                    for b in range(other.columns):
                        value = 0
                        for c in range(other.rows):
                            value += self.matrix[a][c] * other.matrix[c][b]
                        new_matrix.append(round(value, 10))
            new_matrix = [new_matrix[i:i + new_matrix_dimensions[1]]
                      for i in range(0, len(new_matrix), new_matrix_dimensions[1])]
            return Matrices(new_matrix)
    

    【讨论】:

    • 感谢您的回答,但问题是我无法初始化这种大小的矩阵,更不用说对其执行 matmul 了。对此有什么想法吗??
    • 我的猜测是该库不允许初始化该大小的矩阵。然而,上面的代码没有这些限制。
    猜你喜欢
    • 2017-04-05
    • 2020-11-09
    • 2019-06-16
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多