web-dev-qa-db-ja.com

pythonのシグモイドは、スカラー、ベクトル、または行列を取ることができます

次のコードは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))

ただし、スカラーに対してのみ機能します。ベクトルとマトリックスには使用できません。私は何を間違っているのですか。すみません、以前の私の質問はあまり明確ではありませんでした。再編集しました。

8
sunny

多くの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     ]]
9
Rory Daulton

あるいは、scipyで利用可能な vectorized Sigmoid functionexpitを使用できます。

from scipy.special import expit
from numpy import array

z = array([ 0.2, 0.4, 0.1])
g = expit(z)
0
pors