tenssorflow softmax関数の使い方について解析します。
4079 ワード
以下の通りです
答えはソフトマックスがある軸の下付きをインデックスとして表示し、この軸の他の次元の値をアクティブ化+正規化します。
一般的に、このインデックス軸はカテゴリの次元(tf.nn.softmaxではデフォルトはaxis=-1、つまり最後の次元)を表しています。
例:
これらの値はどうやって得られますか?
ccを例として(axis=0に沿ってソフトマックスを作る):
cccを例として(axis=1に沿ってソフトマックスを行う):
計算方法が分かりました。これらの値の実際的な意味について検討します。
c c[0,0]は実際にこのような確率を表しています。
c c[1,0]は実際にこのような確率を表しています。P(label=1|value=[-1.3622268 0.981082]=c[*,0])=0.8173254
c c c[0,0]は実際にこのような確率を表しています。P(label=0|value=[-1.3522268 0.9127472 1.21384177]=c[0]=0.0500392
c c c[0,1]は実際にこのような確率を表しています。P(label=1|value=[-1.3522268 0.9127472 1.21384177]=c[0]=0.3172426
c c c[0,2]実際にこのような確率を表しています。P(label=2|value=[-1.3522268 0.6927472 1.21384177]=c[0]=0.1823654
彼らをより多くの次元に拡張する場合:cは[batch_]であると仮定する。size、timesteps、categoriesの三次元tensor
output=tf.nn.softmax(c,axis=-1)
それならoutput[1,2,3]はP(label=3|value=c[1,2]を表します。)
以上、tenssorflow softmax関数の使い方についての解析は、小編集が皆さんに提供したすべての内容です。参考にしていただければと思います。よろしくお願いします。
def softmax(logits, axis=None, name=None, dim=None):
"""Computes softmax activations.
This function performs the equivalent of
softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)
Args:
logits: A non-empty `Tensor`. Must be one of the following types: `half`,
`float32`, `float64`.
axis: The dimension softmax would be performed on. The default is -1 which
indicates the last dimension.
name: A name for the operation (optional).
dim: Deprecated alias for `axis`.
Returns:
A `Tensor`. Has the same type and shape as `logits`.
Raises:
InvalidArgumentError: if `logits` is empty or `axis` is beyond the last
dimension of `logits`.
"""
axis = deprecation.deprecated_argument_lookup("axis", axis, "dim", dim)
if axis is None:
axis = -1
return _softmax(logits, gen_nn_ops.softmax, axis, name)
Softmax関数の戻り結果は入力したtensorと同じshpeがあります。tensorの形を変えていない以上、Softmaxは一体tenssorに何をしましたか?答えはソフトマックスがある軸の下付きをインデックスとして表示し、この軸の他の次元の値をアクティブ化+正規化します。
一般的に、このインデックス軸はカテゴリの次元(tf.nn.softmaxではデフォルトはaxis=-1、つまり最後の次元)を表しています。
例:
def softmax(X, theta = 1.0, axis = None):
"""
Compute the softmax of each element along an axis of X.
Parameters
----------
X: ND-Array. Probably should be floats.
theta (optional): float parameter, used as a multiplier
prior to exponentiation. Default = 1.0
axis (optional): axis to compute values along. Default is the
first non-singleton axis.
Returns an array the same size as X. The result will sum to 1
along the specified axis.
"""
# make X at least 2d
y = np.atleast_2d(X)
# find axis
if axis is None:
axis = next(j[0] for j in enumerate(y.shape) if j[1] > 1)
# multiply y against the theta parameter,
y = y * float(theta)
# subtract the max for numerical stability
y = y - np.expand_dims(np.max(y, axis = axis), axis)
# exponentiate y
y = np.exp(y)
# take the sum along the specified axis
ax_sum = np.expand_dims(np.sum(y, axis = axis), axis)
# finally: divide elementwise
p = y / ax_sum
# flatten if X was 1D
if len(X.shape) == 1: p = p.flatten()
return p
c = np.random.randn(2,3)
print(c)
# 0 ,
cc = softmax(c,axis=0)
# , 3
ccc = softmax(c,axis=-1)
print(cc)
print(ccc)
結果:
c:
[[-1.30022268 0.59127472 1.21384177]
[ 0.1981082 -0.83686108 -1.54785864]]
cc:
[[0.1826746 0.80661068 0.94057075]
[0.8173254 0.19338932 0.05942925]]
ccc:
[[0.0500392 0.33172426 0.61823654]
[0.65371718 0.23222472 0.1140581 ]]
axis=0の軸にソフトマックスを行うと、出力結果はaxis=0軸に1(eg:0.826746+0.8173254)となり、axis=1軸に同じ原理で行うと結果のaxis=1軸にも1(eg:0.0500392+0.31726+0.6923654)となります。これらの値はどうやって得られますか?
ccを例として(axis=0に沿ってソフトマックスを作る):
cccを例として(axis=1に沿ってソフトマックスを行う):
計算方法が分かりました。これらの値の実際的な意味について検討します。
c c[0,0]は実際にこのような確率を表しています。
c c[1,0]は実際にこのような確率を表しています。P(label=1|value=[-1.3622268 0.981082]=c[*,0])=0.8173254
c c c[0,0]は実際にこのような確率を表しています。P(label=0|value=[-1.3522268 0.9127472 1.21384177]=c[0]=0.0500392
c c c[0,1]は実際にこのような確率を表しています。P(label=1|value=[-1.3522268 0.9127472 1.21384177]=c[0]=0.3172426
c c c[0,2]実際にこのような確率を表しています。P(label=2|value=[-1.3522268 0.6927472 1.21384177]=c[0]=0.1823654
彼らをより多くの次元に拡張する場合:cは[batch_]であると仮定する。size、timesteps、categoriesの三次元tensor
output=tf.nn.softmax(c,axis=-1)
それならoutput[1,2,3]はP(label=3|value=c[1,2]を表します。)
以上、tenssorflow softmax関数の使い方についての解析は、小編集が皆さんに提供したすべての内容です。参考にしていただければと思います。よろしくお願いします。