質問編集履歴
6
修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -205,4 +205,5 @@ | |
| 205 205 |  | 
| 206 206 | 
             
            # print(true_data)
         | 
| 207 207 | 
             
            ```
         | 
| 208 | 
            -
            結果は例えばこうなります。
         | 
| 208 | 
            +
            結果は例えばこうなります。
         | 
| 209 | 
            +
            
         | 
5
修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -205,5 +205,4 @@ | |
| 205 205 |  | 
| 206 206 | 
             
            # print(true_data)
         | 
| 207 207 | 
             
            ```
         | 
| 208 | 
            -
            結果は例えばこうなります。
         | 
| 208 | 
            +
            結果は例えばこうなります。
         | 
| 209 | 
            -
            /Users/keisuke/Desktop/ 2019-05-03 1.17.48.png
         | 
4
追加
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -204,4 +204,6 @@ | |
| 204 204 | 
             
            plt.show()
         | 
| 205 205 |  | 
| 206 206 | 
             
            # print(true_data)
         | 
| 207 | 
            -
            ```
         | 
| 207 | 
            +
            ```
         | 
| 208 | 
            +
            結果は例えばこうなります。
         | 
| 209 | 
            +
            /Users/keisuke/Desktop/ 2019-05-03 1.17.48.png
         | 
3
修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -135,7 +135,7 @@ | |
| 135 135 |  | 
| 136 136 | 
             
            chainerに詳しい方、回答いただけると嬉しいです。よろしくお願いします。
         | 
| 137 137 |  | 
| 138 | 
            -
            追記
         | 
| 138 | 
            +
            ###追記
         | 
| 139 139 | 
             
            うまくいかない、というのは良い予測ができないという意味です。明らかに簡単なデータなので、コードのモデルに何か問題があるのだろうと思っています。上記コードで学習したのち、以下のコードでテストしています。
         | 
| 140 140 | 
             
            ```
         | 
| 141 141 | 
             
            import chainer
         | 
2
追記
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -133,4 +133,75 @@ | |
| 133 133 | 
             
            serializers.save_npz('lstm.npz',net)
         | 
| 134 134 | 
             
            ```
         | 
| 135 135 |  | 
| 136 | 
            -
            chainerに詳しい方、回答いただけると嬉しいです。よろしくお願いします。
         | 
| 136 | 
            +
            chainerに詳しい方、回答いただけると嬉しいです。よろしくお願いします。
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            追記
         | 
| 139 | 
            +
            うまくいかない、というのは良い予測ができないという意味です。明らかに簡単なデータなので、コードのモデルに何か問題があるのだろうと思っています。上記コードで学習したのち、以下のコードでテストしています。
         | 
| 140 | 
            +
            ```
         | 
| 141 | 
            +
            import chainer
         | 
| 142 | 
            +
            import chainer.functions as F
         | 
| 143 | 
            +
            import chainer.links as L
         | 
| 144 | 
            +
            from chainer import training,optimizers
         | 
| 145 | 
            +
            import math
         | 
| 146 | 
            +
            import numpy as np
         | 
| 147 | 
            +
            from chainer.datasets import TupleDataset,split_dataset_random
         | 
| 148 | 
            +
            from chainer import iterators,serializers
         | 
| 149 | 
            +
            import matplotlib.pyplot as plt
         | 
| 150 | 
            +
             | 
| 151 | 
            +
             | 
| 152 | 
            +
            class lstm(chainer.Chain):
         | 
| 153 | 
            +
                def __init__(self,n_mid=4,n_out=1):
         | 
| 154 | 
            +
                    super(lstm,self).__init__()
         | 
| 155 | 
            +
                    with self.init_scope():
         | 
| 156 | 
            +
                        self.l1 = L.Linear(None,n_mid)
         | 
| 157 | 
            +
                        self.l2 = L.LSTM(n_mid,n_mid)
         | 
| 158 | 
            +
                        self.l3 = L.Linear(n_mid,n_out)
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                def reset_state(self):
         | 
| 161 | 
            +
                    self.l2.reset_state()
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                def __call__(self,x):
         | 
| 164 | 
            +
                    h = self.l1(x)
         | 
| 165 | 
            +
                    h = self.l2(h)
         | 
| 166 | 
            +
                    h = self.l3(h)
         | 
| 167 | 
            +
                    return h
         | 
| 168 | 
            +
             | 
| 169 | 
            +
            loaded_net = L.Classifier(lstm())
         | 
| 170 | 
            +
            chainer.serializers.load_npz('lstm.npz',loaded_net)
         | 
| 171 | 
            +
             | 
| 172 | 
            +
            data = []
         | 
| 173 | 
            +
            x = 10
         | 
| 174 | 
            +
            for i in range(x):
         | 
| 175 | 
            +
                data.append(math.sin(i/10))
         | 
| 176 | 
            +
            data = np.array(data).astype('float32')
         | 
| 177 | 
            +
             | 
| 178 | 
            +
            true_data = []
         | 
| 179 | 
            +
            for i in range(100):
         | 
| 180 | 
            +
                true_data.append(math.sin(i/10))
         | 
| 181 | 
            +
            true_data = np.array(true_data).astype('float32')
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            def make_data(data):
         | 
| 184 | 
            +
                l = np.zeros([1,1]).astype('float32')
         | 
| 185 | 
            +
                data = data[-10:]
         | 
| 186 | 
            +
                for i in range(len(l)):
         | 
| 187 | 
            +
                    l[i] = data[i:i+1]
         | 
| 188 | 
            +
                return l
         | 
| 189 | 
            +
             | 
| 190 | 
            +
            # print(make_data(data))
         | 
| 191 | 
            +
             | 
| 192 | 
            +
            for i in range(100-x):
         | 
| 193 | 
            +
                with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):
         | 
| 194 | 
            +
                    y = loaded_net.predictor.__call__(make_data(data))
         | 
| 195 | 
            +
                    # print(np.array(y.data).reshape(-1))
         | 
| 196 | 
            +
                    data = np.append(data,y.data.reshape(-1)[-1])
         | 
| 197 | 
            +
             | 
| 198 | 
            +
             | 
| 199 | 
            +
             | 
| 200 | 
            +
            plt.plot(range(len(data)),data,label='lstm')
         | 
| 201 | 
            +
            plt.plot(range(len(true_data)),true_data,label='train_data')
         | 
| 202 | 
            +
            plt.legend()
         | 
| 203 | 
            +
             | 
| 204 | 
            +
            plt.show()
         | 
| 205 | 
            +
             | 
| 206 | 
            +
            # print(true_data)
         | 
| 207 | 
            +
            ```
         | 
1
編集
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            ###chainerでLSTMを実装してsin波を学習したがうまくいかない
         | 
| 2 | 
            -
            コードは以下です。分類でないのにclassifierでラップしてし | 
| 2 | 
            +
            コードは以下です。分類でないのにclassifierでラップして実装しようとしているのでそこらへんで実装にミスがあると思うのですが…
         | 
| 3 3 |  | 
| 4 4 | 
             
            ```
         | 
| 5 5 | 
             
            import chainer
         | 
