W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
定義在:tensorflow/python/ops/linalg/linear_operator.py.
請參閱指南:線性代數(shù)(contrib)>LinearOperator
定義[batch of]線性運算符[s]的基類.
LinearOperator的子類提供對(batch)矩陣的常用方法的訪問,而不需要具體化矩陣.這允許:
子類
要啟用公共方法,子類應(yīng)實現(xiàn)方法的前導(dǎo)下劃線版本.除了省略name="..."外,參數(shù)簽名應(yīng)該相同.例如,要啟用matmul(x, adjoint=False, name="matmul"),子類應(yīng)該實現(xiàn)_matmul(x, adjoint=False).
履約合同
子類應(yīng)該只實現(xiàn)斷言方法(例如,assert_non_singular),如果它們可以在不到O(N^3)時間內(nèi)完成.
類文檔字符串應(yīng)包含計算復(fù)雜性的解釋.由于這是一個高性能庫,因此應(yīng)注意細(xì)節(jié),解釋可以包括常量和Big-O表示法.
形狀兼容性
LinearOperator子類應(yīng)該在具有兼容形狀的[batch]矩陣上運行.類文檔字符串應(yīng)該定義兼容形狀的含義.某些子類可能不支持批處理.
一個例子是:
x是一個具有matmulif的兼容形狀的批處理矩陣,如果滿足下列條件:
operator.shape = [B1,...,Bb] + [M, N], b >= 0,
x.shape = [B1,...,Bb] + [N, R]
rhs是一個具有solveif的兼容形狀的批處理矩陣,如果滿足下列條件:
operator.shape = [B1,...,Bb] + [M, N], b >= 0,
rhs.shape = [B1,...,Bb] + [M, R]
子類的示例文檔字符串
該運算符的作用類似于(batch)矩陣A,其形狀為[B1,...,Bb, M, N],適合某些b >= 0.第一個b指數(shù)索引一個批處理成員.對于每個批次索引(i1,...,ib),A[i1,...,ib, : :],都是一個m x n矩陣.同樣,該矩陣A可能沒有實現(xiàn),但為了識別和使用兼容的參數(shù),形狀是相關(guān)的.
例子:
some_tensor = ... shape = ????
operator = MyLinOp(some_tensor)
operator.shape()
==> [2, 4, 4]
operator.log_abs_determinant()
==> Shape [2] Tensor
x = ... Shape [2, 4, 5] Tensor
operator.matmul(x)
==> Shape [2, 4, 5] Tensor
矩陣屬性提示
該LinearOperator是使用表單is_X的布爾標(biāo)志初始化,用于X = non_singular, self_adjoint, positive_definite, square,它們具有以下含義:
LinearOperator的批處理維度的 TensorShape.
如果這個運算符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回TensorShape([B1,...,Bb]),相當(dāng)于A.get_shape()[:-2]
返回:
TensorShape,靜態(tài)確定,可能是未定義的.
此運算符的域的維度(在向量空間的意義上).
如果這個運算符的作用類似于帶有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回N.
返回:
Dimension對象.
LinearOperator處理的張量在DType.
LinearOperator的圖依賴關(guān)系列表.
返回True/False,取決于此運算符是否為正方形.
名稱前置于由LinearOperator創(chuàng)建的所有操作.
此運算符范圍的維度(在向量空間意義上).
如果這個運算符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回M.
返回:
Dimension對象.
這個LinearOperator的TensorShape.
如果此運算符的作用類似于帶有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回TensorShape([B1,...,Bb, M, N]),相當(dāng)于A.get_shape().
返回:
TensorShape,靜態(tài)確定,可能是未定義的.
對應(yīng)于該運算符的矩陣的秩(在張量的意義上).
如果這個運算符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回b + 2.
參數(shù):
返回:
Python整數(shù),如果張量的秩未定義,則為None.
__init__(
dtype,
graph_parents=None,
is_non_singular=None,
is_self_adjoint=None,
is_positive_definite=None,
is_square=None,
name=None
)
該方法用于初始化LinearOperator.
這是子類使用的私有方法,子類應(yīng)復(fù)制粘貼此__init__文檔.
參數(shù):
可能引發(fā)的異常:
add_to_tensor(
x,
name='add_to_tensor'
)
將此運算符表示的矩陣添加到x,相當(dāng)于A + x.
參數(shù):
返回:
具有廣播形狀并且與self有相同dtype的張量.
assert_non_singular(name='assert_non_singular')
返回一個運算,它可以斷言此運算符是非單數(shù)的.
如果滿足以下條件,則這個運算符被認(rèn)為是非單數(shù)的:
ConditionNumber < max{100, range_dimension, domain_dimension} * eps,
eps := np.finfo(self.dtype.as_numpy_dtype).eps
參數(shù):
返回:
返回一個Assert Op,當(dāng)運行時,如果操作符是單數(shù)的話,將引發(fā)一個InvalidArgumentError.
assert_positive_definite(name='assert_positive_definite')
返回一個運算,斷言此運算符是正定的.
這里,正定意味著二次形式x^H A x對于所有非零x都具有正實部.請注意,我們不要求運算符是自共軛的,是正定的.
參數(shù):
返回:
返回一個Assert Op,即在運行時,如果運算符不正定,則會引發(fā)InvalidArgumentError.
assert_self_adjoint(name='assert_self_adjoint')
返回一個運算,它斷言此運算符是自共軛的.
在這里,我們檢查此運算符是否與其hermitian轉(zhuǎn)置完全相同.
參數(shù):
返回:
返回一個Assert Op,即在運行時,將引發(fā)一個InvalidArgumentError,如果運算符不是自共軛的.
batch_shape_tensor(name='batch_shape_tensor')
在運行時確定的此運算符的批處理維度的形狀.
如果這個操作符的作用類似于帶有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則將返回一個具有[B1,...,Bb]的Tensor.
參數(shù):
返回:
返回int32類型的Tensor.
determinant(name='det')
每個批次成員的決定因素.每個批處理成員的行列式.
參數(shù):
返回:
具有形狀self.batch_shape并且與self具有相同dtype的Tensor
可能引發(fā)的異常:
diag_part(name='diag_part')
有效地獲取此運算符的 [批] 對角線部分.
如果這個操作符有形狀 [B1,..., Bb, M, N], 這返回一個張量對角線, 形狀 [B1,..., Bb, min (M, N)], 其中對角線 [B1,..., bb, i] = 自. to_dense () [B1,..., Bb, 我, 我].
有效地獲得此運算符的[batch]對角線部分.
如果此運算符具有形狀[B1,...,Bb, M, N],則返回Tensor diagonal,其形狀為[B1,...,Bb, min(M, N)],其中diagonal[b1,...,bb, i] = self.to_dense()[b1,...,bb, i, i].
my_operator = LinearOperatorDiag([1., 2.])
# Efficiently get the diagonal
my_operator.diag_part()
==> [1., 2.]
# Equivalent, but inefficient method
tf.matrix_diag_part(my_operator.to_dense())
==> [1., 2.]
參數(shù):
返回:
domain_dimension_tensor(name='domain_dimension_tensor')
此運算符的域的維度(在向量空間的意義上).
在運行時確定.
如果這個操作符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回N.
參數(shù):
返回:
返回int32類型的Tensor.
log_abs_determinant(name='log_abs_det')
記錄每個批處理成員的行列式的對數(shù)絕對值.
參數(shù):
返回:
返回具有形狀self.batch_shape并且和self具有相同dtype的Tensor.
可能引發(fā)的異常:
matmul(
x,
adjoint=False,
adjoint_arg=False,
name='matmul'
)
使用左乘法:x --> Ax轉(zhuǎn)換[batch]矩陣x.
# Make an operator acting like batch matrix A. Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]
X = ... # shape [..., N, R], batch matrix, R > 0.
Y = operator.matmul(X)
Y.shape
==> [..., M, R]
Y[..., :, r] = sum_j A[..., :, j] X[j, r]
參數(shù):
返回:
返回具有形狀[..., M, R],并且和delf具有相同dtype的Tensor.
matvec(
x,
adjoint=False,
name='matvec'
)
用左乘法:x --> Ax變換[batch]向量x.
# Make an operator acting like batch matric A. Assume A.shape = [..., M, N]
operator = LinearOperator(...)
X = ... # shape [..., N], batch vector
Y = operator.matvec(X)
Y.shape
==> [..., M]
Y[..., :] = sum_j A[..., :, j] X[..., j]
參數(shù):
返回:
返回具有形狀[..., M],并且和self具有相同dtype的Tensor.
range_dimension_tensor(name='range_dimension_tensor')
此運算符范圍的維度(在向量空間意義上).
在運行時確定.
如果這個運算符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回M.
參數(shù):
返回:
返回int32類型的Tensor.
shape_tensor(name='shape_tensor')
該LinearOperator的形狀,在運行時確定.
如果此操作符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批次矩陣A,則返回一個具有[B1,...,Bb, M, N]的Tensor,相當(dāng)于tf.shape(A).
參數(shù):
返回:
返回int32類型的Tensor
solve(
rhs,
adjoint=False,
adjoint_arg=False,
name='solve'
)
求解(精確或近似)R(批量)方程組:A X = rhs.
如果A條件良好,則返回的Tensor將接近一個精確的解決方案.否則親密程度會有所不同.
例子:
# Make an operator acting like batch matrix A. Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]
# Solve R > 0 linear systems for every member of the batch.
RHS = ... # shape [..., M, R]
X = operator.solve(RHS)
# X[..., :, r] is the solution to the r'th linear system
# sum_j A[..., :, j] X[..., j, r] = RHS[..., :, r]
operator.matmul(X)
==> RHS
參數(shù):
返回:
返回具有形狀[...,N, R],并且和rhs具有相同dtype的Tensor.
可能引發(fā)的異常:
solvevec(
rhs,
adjoint=False,
name='solve'
)
盡最大努力解決單個方程式:A X = rhs.
如果A條件良好,返回的Tensor將接近一個精確的解決方案.否則親密程度會有所不同.
例子:
# Make an operator acting like batch matrix A. Assume A.shape = [..., M, N]
operator = LinearOperator(...)
operator.shape = [..., M, N]
# Solve one linear system for every member of the batch.
RHS = ... # shape [..., M]
X = operator.solvevec(RHS)
# X is the solution to the linear system
# sum_j A[..., :, j] X[..., j] = RHS[..., :]
operator.matvec(X)
==> RHS
參數(shù):
返回:
返回具有形狀[...,N],并且和rhs具有相同dtype的Tensor.
可能引發(fā)的異常:
tensor_rank_tensor(name='tensor_rank_tensor')
對應(yīng)于該運算符的矩陣的秩(在張量的意義上).
如果這個操作符的作用類似于具有A.shape = [B1,...,Bb, M, N]的批量矩陣A,則返回b + 2.
參數(shù):
返回:
返回int32類型的Tensor,在運行時確定.
to_dense(name='to_dense')
返回表示此運算符的密集(批處理)矩陣.
trace(name='trace')
線性操作的跟蹤,等于self.diag_part()的總和.
如果運算符為平方,則這也是特征值的總和.
參數(shù):
返回:
返回形狀為[B1,...,Bb]的Tensor,與self具有相同的dtype.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: