Python勉強読書ノート_第二章:テンソル計算のいくつかの総括について
1375 ワード
「Python深さ学習」という本の第2章を読んでテンソル演算を理解したので、記録をまとめてみました.
エレメント単位の演算
relu演算と加算演算はいずれも要素単位の演算であり,要素単位とはテンソルの各要素を逐一演算することを指す.
ここで、relu(X)はmax(X,0)である
行列とベクトルが加算されると、ベクトルはブロードキャストされ、ベクトルと行列の各行が加算されます.
次の例では、要素毎のmaxinum演算を、2つの形状の異なるテンソルにブロードキャストを用いて適用する.
エレメント単位の演算
relu演算と加算演算はいずれも要素単位の演算であり,要素単位とはテンソルの各要素を逐一演算することを指す.
ここで、relu(X)はmax(X,0)である
# relu
def naive_relu(x):
assert len(x.shape) == 2 # x Numpy 2D
x = x.copy()
for i in range(x.shape[0]): #
for j in range(x.shape[1]):
x[i, j] = max(x[i, j], 0)
return x
#
def naive_add(x, y):
assert len(x.shape) == 2 # x,y Numpy 2D
assert x.shape == y.shape
x = x.copy()
for i in range(x.shape[0]):
for j in range(x.shape[1]):
x[i, j] += y[i, j]
return x
行列とベクトルが加算されると、ベクトルはブロードキャストされ、ベクトルと行列の各行が加算されます.
#
def naive_add_matrix_and_vector(x, y):
assert len(x.shape) == 2 # x Numpy 2D
assert len(y.shape) == 1 # y Numpy
assert x.shape[1] == y.shape[0]
x = x.copy()
for i in range(x.shape[0]):
for j in range(x.shape[1]):
x[i, j] += y[j]
return x
x = np.array([[1,2,3],
[4,5,6]])
y = np.array([1,2,3])
z = naive_add_matrix_and_vector(x, y)
z
次の例では、要素毎のmaxinum演算を、2つの形状の異なるテンソルにブロードキャストを用いて適用する.
import numpy as np
x = np.random.random((2,1))
y = np.random.random((1))
z = np.maximum(x, y)
print(x)
print(y)
print(z)