Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. function net1=create_LSTM_network(input_size , before_layers , before_activation,hidden_size, after_layers , after_activations , output_size)
  2. %% this part split the input into two seperate parts the first part
  3. %is the input size and the second part is the memory
  4. real_input_size=input_size ;
  5. N_before=length(before_layers);
  6. N_after=length(after_layers) ;
  7. delays_vec=1 ;
  8. if (N_before>0 ) && (N_after>0)
  9. input_size=before_layers(end) ;
  10. net1=fitnet( [before_layers , input_size+hidden_size , hidden_size*ones(1,9),after_layers]) ;
  11. elseif (N_before>0) && (N_after==0)
  12. input_size=before_layers(end) ;
  13. net1=fitnet([before_layers,input_size+hidden_size , hidden_size*ones(1 , 9)]) ;
  14. elseif (N_before==0)&&(N_after>0)
  15. net1=fitnet([input_size+hidden_ size , hidden_size*ones(1, 9) , after_layers]) ;
  16. else
  17. net1 =fitnet( [input size+hidden_size, hidden_size*ones(1, 9)]);
  18. end
  19. net1=configure(net1 ,rand( real_input_size , 200) , rand(output_size,200)) ;
  20. %% concatenation
  21. net1.layers{N_before+1}.name='Concatenation Layer';
  22. net1.layers{N_before+2}.name = 'Forget Amount' ;
  23. net1.layers{N_before+3}.name= 'Forget Gate';
  24. net1.layers{N_before+4}.name= 'Remember Amount';
  25. net1.layers{N_before+5}.name= 'tanh Input' ;
  26. net1.layers{N_before+6}.name= 'Forget Gate';
  27. net1.layers{N_before+7}.name= 'Update Memory';
  28. net1.layers {N_before+8}.name= 'tanh Memory';
  29. net1.layers{N_before+9}.name= 'Combine Amount' ;
  30. net1.layers{N_before+10}.name= 'Combine gate' ;
  31. net1.layerConnect(N_before+3 , N_before+7) =1 ;
  32. net1.layerConnect(N_before+1 ,N_before+10)=1 ;
  33. net1.layerConnect(N_before+4 , N_before+3)=0;
  34. net1.layerWeights{N_before+1 , N_before+10}.delays=delays_vec ;
  35. if N_before>0
  36. net1.LW{N_before+1 , N_before} = [eye(input_size) ; zeros(hidden_size, input_size)];
  37. else
  38. net1.IW{1,1}=[eye( input_size) ;zeros(hidden_size , input_size)];
  39. end
  40. net1.LW{N_before+1 , N_before+10}=repmat ([zeros(input_size, hidden_size); eye(hidden_size)] , [1 , size(delays_vec,2)] ) ;
  41. net1.layers{N_before+1}.transferFcn='purelin';
  42. net1.layerWeights{N_before+1 ,N_before+10}.learn=false;
  43. if N_before>0
  44. net1.layerWeights{ N_before+1 ,N_before}.learn=false;
  45. else
  46. net1.inputWeights{ 1, 1}.learn=false ;
  47. end
  48. %%
  49. net1.biasConnect = [ones(1,N_before) 0 1 0 1 1 0 0 0 1 0 1 ones(1,N_after)]' ;%
  50. %% first gate
  51. net1.layers{N_before+2}.transferFcn= 'logsig' ;
  52. net1.layerWeights{N_before+3, N_before+2}.weightFcn='scalprod' ;
  53. % net1 .layerWeights{3 , 7} .weightFcn= ' scalprod ';
  54. net1.layerWeights{N_before+3, N_before+2}.learn=false;
  55. net1.layerWeights{N_before+3, N_before+7}.learn=false ;
  56. net1.layers{N_before+3}.netinputFcn= 'netprod';
  57. net1.layers{N_before+3}.transferFcn='purelin';
  58. net1.LW{N_before+3, N_before+2}=1;
  59. % net1.LW{3 , 7} =1 ;
  60. %% second gate
  61. net1.layerConnect(N_before+4,N_before+1)=1;
  62. net1.layers{N_before+4}.transferFcn='logsig' ;
  63. %% tanh
  64. net1.layerConnect(N_before+5 , N_before+4) =0;
  65. net1.layerConnect( N_before+5 , N_before+1)=1;
  66. %%second gate mult
  67. net1.layerConnect(N_before+6, N_before+4)=1;
  68. net1.layers{N_before+6}.netinputFcn='netprod' ;
  69. net1.layers{N_before+6} .transferFcn= 'purelin';
  70. net1.layerWeights{N_before+6, N_before+5}.weightFcn='scalprod';
  71. net1.layerWeights {N_before+6 , N_before+4}.weightFcn='scalprod';
  72. net1.layerWeights{N_before+6 , N_before+5}.learn=false ;
  73. net1.layerWeights{N_before+6,N_before+4}.learn=false;
  74. net1.LW{N_before+6 , N_before+5} =1;
  75. net1.LW{N_before+6 , N_before+4}=1 ;
  76. %% C update
  77. delays_vec=1;
  78. net1.layerConnect(N_before+7,N_before+3)=1 ;
  79. net1.layerWeights{N_before+3,N_before+7} . delays=delays_vec ;
  80. net1.layerWeights{N_before+7,N_before+3}.weightFcn= 'scalprod';
  81. net1.layerWeights{N_before+7,N_before+6}.weightFcn= 'scalprod';
  82. net1 .layers{N_before+7}.transferFcn= 'purelin';
  83. net1.LW{N_before+7 , N_before+3} =1 ;
  84. net1.LW{N_before+7 , N_before+6} =1 ;
  85. net1.LW{N_before+3 , N_before+7}=repmat(eye(hidden_size), [1 , size(delays_vec,2)] );
  86. net1.layerWeights{N_before+3 , N_before+7}.learn=false ;
  87. net1.layerWeights{N_before+7 ,N_before+6}.learn=false;
  88. net1.layerWeights{N_before+7,N_before+3}.learn=false;
  89. %% output stage
  90. net1.layerConnect(N_before+9, N_before+8)=0;
  91. net1.layerConnect(N_before+10 , N_before+8) = 1 ;
  92. net1.layerConnect(N_before+9, N_before+1) =1 ;
  93. net1.layerWeights{N_before+10 , N_before+8}.weightFcn='scalprod' ;
  94. net1.layerWeights{N_before+10 , N_before+9}.weightFcn= 'scalprod' ;
  95. net1.LW{N_before +10 ,N_before+9}=1 ;
  96. net1.LW{N_before+10,N_before+8}=1 ;
  97. net1.layers{N_before+10}.netinputFcn= 'netprod' ;
  98. net1.layers{N_before+10}.transferFcn= 'purelin';
  99. net1.layers{N_before+9}.transferFcn= 'logsig';
  100. net1.layers{N_before+5}.transferFcn='tansig';
  101. net1.layers{N_before+8}.transferFcn='tansig' ;
  102. net1.layerWeights{N_before+10 ,N_before+ 9}.learn= false ;
  103. net1.layerWeights{N_before +10,N_before+8 }.learn= false ;
  104. net1.layerWeights{N_before+7 ,N_before+3 }. learn=false ;
  105. for ll=1:N_before
  106. net1.layers{ll}.transferFcn=before_activation;
  107. end
  108. for ll=1:N_after
  109. net1. layers{end-ll}.transferFcn=after_activations ;
  110. end
  111.  
  112. net1.layerWeights{N_before+8 , N_before+7}.weightFcn='scalprod' ;
  113. net1.LW{N_before+8 , N_before+7}=1 ;
  114. net1.layerWeights{N_before+8 , N_before+7}.learn=false ;
  115. %%
  116. net1=configure(net1 , rand(real_input_size ,200) , rand(output_size , 200) ) ;
  117. net1.trainFcn= 'trainlm';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement