次のコードはOctaveプログラミング言語で書かれています
g =1./(1+e.^-(z)
シグモイド関数を計算し、スカラー、ベクトルまたは行列をとることができます。たとえば、上記を関数sigmoid(z)(z = 0)に入れると、結果は次のようになります。
result=sigmoid(0)
パスがベクトルと言う場合、結果はスカラー(0.5)になります(z = [0.2、0.4、0.1])。結果のベクトルは次のように出力されます
result=sigmoid(z)
結果はベクトルです:
0.54983 0.59869 0.52498
zが次のような行列の場合
z=[ 0.2 0.4; 0.5 0.7; 0.9 .004]
result = sigmoid(z)
結果は=
0.54983 0.59869
0.62246 0.66819
0.71095 0.50100
次に、Pythonで同様のメソッドを実装するにはどうすればよいですか。私は以下のコードを試しました、
g=1./ (1 + math.exp(-z))
ただし、スカラーに対してのみ機能します。ベクトルとマトリックスには使用できません。私は何を間違っているのですか。すみません、以前の私の質問はあまり明確ではありませんでした。再編集しました。
多くのPythonディストリビューションに含まれ、他の人に簡単に追加できる)numpyモジュールには配列機能があります。ここでPython numpy 。numpyでの配列の定義はOctaveでの定義とは少し異なりますが、シグモイド式はほとんど同じです。
from numpy import array, exp
z = array([ 0.2, 0.4, 0.1])
print('z = \n', z)
g = 1 / (1 + exp(-z))
print('g =\n', g)
print()
z = array([[0.2, 0.4], [0.5, 0.7], [0.9, .004]])
print('z = \n', z)
g = 1 / (1 + exp(-z))
print('g =\n', g)
そのコード(IPythonで実行中)の結果は次のとおりです。
z =
[ 0.2 0.4 0.1]
g =
[ 0.549834 0.59868766 0.52497919]
z =
[[ 0.2 0.4 ]
[ 0.5 0.7 ]
[ 0.9 0.004]]
g =
[[ 0.549834 0.59868766]
[ 0.62245933 0.66818777]
[ 0.7109495 0.501 ]]
あるいは、scipyで利用可能な vectorized Sigmoid functionexpit
を使用できます。
from scipy.special import expit
from numpy import array
z = array([ 0.2, 0.4, 0.1])
g = expit(z)