2017-01-05 6 views
1

전산 신경 과학 수업을 Coursera에 가져갈 것입니다. 지금까지 그것은 갈 수있었습니다! 그러나, 나는 퀴즈 문제 중 하나에 조금 붙어 있어요.선형 반복 네트워크의 정상 상태 출력 찾기

나는 인증서 또는 아무것도이 클래스를 복용하지 않습니다. 재미만을 위해. 나는 이미 퀴즈를 풀었고 얼마 후 대답을 추측 했으므로 퀴즈에 답하지 않을 것입니다.

질문은 다음과 같이 구성되어 있습니다. 5 개의 입력 노드와 5 개의 출력 노드로 구성된 선형 순환 네트워크가 있다고 가정합니다. 우리의 네트워크의 가중치 행렬의 W이라고 가정 해 봅시다 : (. 기본적으로 모든 0.1, 대각선에 0.6 이외의)

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 :

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]]) 

를하고 코드에 적합한 솔루션 생성 :

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] 

아마 문제가 코 세라의 테스트와 함께입니다. 포럼에서 그들과 연락을 시도 했습니까?

+0

연락 할 사람을 알지 못했습니다. 이 질문에 대한 답변을 제 프로그램에 가지고 있다고 확신하십니까? 나는 Coursera가 사람들의 무리를 위해 잘못된 해결책을 내놓을 것이라고 생각하지 않습니다. 내 코드가 버그가 있어야하거나 논리에 결함이 있어야한다고 생각합니다. – jlarks32

관련 문제