2017-01-05 6 views
1

私はCourseraで計算神経科学のクラスを取っています。これまでのところ、これはすごく進んでいます!しかし、私はクイズの問題の1つにちょっと立ち往生しています。線形反復ネットワークの定常状態出力を見つける

私は証明書などのためにこのクラスをとっていません。ただ楽しみのために。私はすでにクイズを取っていましたし、しばらくして答えを推測したので、クイズに答えることさえできません。

質問は次のように書かれています。 5つの入力ノードと5つの出力ノードの線形反復ネットワークがあるとします。私たちは私たちのネットワークの重み行列Wであることを言ってみましょう:(。基本的に、対角線上の0.6以外のすべての0.1、)

W = [0.6 0.1 0.1 0.1 0.1] 
    [0.1 0.6 0.1 0.1 0.1] 
    [0.1 0.1 0.6 0.1 0.1] 
    [0.1 0.1 0.1 0.6 0.1] 
    [0.1 0.1 0.1 0.1 0.6] 

たちは、静的入力ベクトルUがあるとします。

u = [0.6] 
    [0.5] 
    [0.6] 
    [0.2] 
    [0.1] 

最後に、我々は再発重み行列Mを持っていることとします

M = [-0.25, 0, 0.25, 0.25, 0] 
    [0, -0.25, 0, 0.25, 0.25] 
    [0.25, 0, -0.25, 0, 0.25] 
    [0.25, 0.25, 0, -0.25, 0] 
    [0, 0.25, 0.25, 0, -0.25] 

次のうち、ネットワークの定常出力v_ssはどれですか? (ヒント:リカレントネットワーク上の講義を参照してください、そして(あなたが「EIG」機能を使用することができます)固有ベクトル/値を処理するためにいくつかのオクターブやMatlabのコード作成を検討「)

クラスのノートは可能に見つけたhere。具体的には、定常式の式はスライド5と6にあります。

私は以下のコードを持っています。

import numpy as np 

# Construct W, the network weight matrix 
W = np.ones((5,5)) 
W = W/10. 
np.fill_diagonal(W, 0.6) 
# Construct u, the static input vector 
u = np.zeros(5) 
u[0] = 0.6 
u[1] = 0.5 
u[2] = 0.6 
u[3] = 0.2 
u[4] = 0.1 
# Connstruct M, the recurrent weight matrix 
M = np.zeros((5,5)) 
np.fill_diagonal(M, -0.25) 
for i in range(3): 
    M[2+i][i] = 0.25 
    M[i][2+i] = 0.25 
for i in range(2): 
    M[3+i][i] = 0.25 
    M[i][3+i] = 0.25 

# We need to matrix multiply W and u together to get h 
# NOTE: cannot use W * u, that's going to do a scalar multiply 
# it's element wise otherwise 
h = W.dot(u) 
print 'This is h' 
print h 

# Ok then the big deal is: 
#        h dot e_i 
# v_ss = sum_(over all eigens) ------------ e_i 
#        1 - lambda_i 

eigs = np.linalg.eig(M) 

eigenvalues = eigs[0] 
eigenvectors = eigs[1] 

v_ss = np.zeros(5) 
for i in range(5): 
    v_ss += (np.dot(h,eigenvectors[:, i]))/((1.0-eigenvalues[i])) * eigenvectors[:,i] 
print 'This is our steady state v_ss' 
print v_ss 

正しい答えは次のとおりです。

This is our steady state v_ss 
[ 0.64362264 0.5606784 0.56007018 0.50057043 0.40172501] 

誰もが私のバグを見つけることができます:

[0.616, 0.540, 0.609, 0.471, 0.430] 

これは私が取得しています何ですか?どうもありがとうございます!私は大いに感謝し、長いブログ投稿をお詫び申し上げます。基本的に、あなたが見る必要があるのは、そのトップリンクのスライド5と6です。

答えて

1

私は自分の行列を使用してソリューションをtryied:

This is h 
[ 0.5 0.45 0.5 0.3 0.25] 
This is our steady state v_ss 
[ 1.663354 1.5762684 1.66344153 1.56488258 1.53205348] 

たぶん、問題はコーセラのテストである:

W = np.array([[0.6 , 0.1 , 0.1 , 0.1 , 0.1], 
       [0.1 , 0.6 , 0.1 , 0.1 , 0.1], 
       [0.1 , 0.1 , 0.6 , 0.1 , 0.1], 
       [0.1 , 0.1 , 0.1 , 0.6 , 0.1], 
       [0.1 , 0.1 , 0.1 , 0.1 , 0.6]]) 
u = np.array([.6, .5, .6, .2, .1]) 

M = np.array([[-0.75 , 0 , 0.75 , 0.75 , 0], 
       [0 , -0.75 , 0 , 0.75 , 0.75], 
       [0.75 , 0 , -0.75 , 0 , 0.75], 
       [0.75 , 0.75 , 0.0 , -0.75 , 0], 
       [0 , 0.75 , 0.75 , 0 , -0.75]]) 

とあなたのコードは、適切なソリューションを生成。あなたはフォーラムでそれらに連絡しようとしましたか?

+0

私は連絡先を知りませんでした。あなたはこれに正しく答える私のプログラムに自信がありますか?私は、Courseraがたくさんの人々のために間違った解決策を出すのではないかと思う。私のコードにバグがなければならないと感じたり、ロジックに欠陥があるはずです。 – jlarks32

関連する問題