質問編集履歴

6

修正

2019/05/02 16:26

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -413,3 +413,5 @@
413
413
  ```
414
414
 
415
415
  結果は例えばこうなります。
416
+
417
+ ![イメージ説明](e84dde23de40bd14d30bd676c78e0bb5.png)

5

修正

2019/05/02 16:26

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -413,5 +413,3 @@
413
413
  ```
414
414
 
415
415
  結果は例えばこうなります。
416
-
417
- /Users/keisuke/Desktop/ 2019-05-03 1.17.48.png

4

追加

2019/05/02 16:25

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -411,3 +411,7 @@
411
411
  # print(true_data)
412
412
 
413
413
  ```
414
+
415
+ 結果は例えばこうなります。
416
+
417
+ /Users/keisuke/Desktop/ 2019-05-03 1.17.48.png

3

修正

2019/05/02 16:25

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -272,7 +272,7 @@
272
272
 
273
273
 
274
274
 
275
- 追記
275
+ ###追記
276
276
 
277
277
  うまくいかない、というのは良い予測ができないという意味です。明らかに簡単なデータなので、コードのモデルに何か問題があるのだろうと思っています。上記コードで学習したのち、以下のコードでテストしています。
278
278
 

2

追記

2019/05/02 16:24

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -269,3 +269,145 @@
269
269
 
270
270
 
271
271
  chainerに詳しい方、回答いただけると嬉しいです。よろしくお願いします。
272
+
273
+
274
+
275
+ 追記
276
+
277
+ うまくいかない、というのは良い予測ができないという意味です。明らかに簡単なデータなので、コードのモデルに何か問題があるのだろうと思っています。上記コードで学習したのち、以下のコードでテストしています。
278
+
279
+ ```
280
+
281
+ import chainer
282
+
283
+ import chainer.functions as F
284
+
285
+ import chainer.links as L
286
+
287
+ from chainer import training,optimizers
288
+
289
+ import math
290
+
291
+ import numpy as np
292
+
293
+ from chainer.datasets import TupleDataset,split_dataset_random
294
+
295
+ from chainer import iterators,serializers
296
+
297
+ import matplotlib.pyplot as plt
298
+
299
+
300
+
301
+
302
+
303
+ class lstm(chainer.Chain):
304
+
305
+ def __init__(self,n_mid=4,n_out=1):
306
+
307
+ super(lstm,self).__init__()
308
+
309
+ with self.init_scope():
310
+
311
+ self.l1 = L.Linear(None,n_mid)
312
+
313
+ self.l2 = L.LSTM(n_mid,n_mid)
314
+
315
+ self.l3 = L.Linear(n_mid,n_out)
316
+
317
+
318
+
319
+ def reset_state(self):
320
+
321
+ self.l2.reset_state()
322
+
323
+
324
+
325
+ def __call__(self,x):
326
+
327
+ h = self.l1(x)
328
+
329
+ h = self.l2(h)
330
+
331
+ h = self.l3(h)
332
+
333
+ return h
334
+
335
+
336
+
337
+ loaded_net = L.Classifier(lstm())
338
+
339
+ chainer.serializers.load_npz('lstm.npz',loaded_net)
340
+
341
+
342
+
343
+ data = []
344
+
345
+ x = 10
346
+
347
+ for i in range(x):
348
+
349
+ data.append(math.sin(i/10))
350
+
351
+ data = np.array(data).astype('float32')
352
+
353
+
354
+
355
+ true_data = []
356
+
357
+ for i in range(100):
358
+
359
+ true_data.append(math.sin(i/10))
360
+
361
+ true_data = np.array(true_data).astype('float32')
362
+
363
+
364
+
365
+ def make_data(data):
366
+
367
+ l = np.zeros([1,1]).astype('float32')
368
+
369
+ data = data[-10:]
370
+
371
+ for i in range(len(l)):
372
+
373
+ l[i] = data[i:i+1]
374
+
375
+ return l
376
+
377
+
378
+
379
+ # print(make_data(data))
380
+
381
+
382
+
383
+ for i in range(100-x):
384
+
385
+ with chainer.using_config('train', False), chainer.using_config('enable_backprop', False):
386
+
387
+ y = loaded_net.predictor.__call__(make_data(data))
388
+
389
+ # print(np.array(y.data).reshape(-1))
390
+
391
+ data = np.append(data,y.data.reshape(-1)[-1])
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+ plt.plot(range(len(data)),data,label='lstm')
400
+
401
+ plt.plot(range(len(true_data)),true_data,label='train_data')
402
+
403
+ plt.legend()
404
+
405
+
406
+
407
+ plt.show()
408
+
409
+
410
+
411
+ # print(true_data)
412
+
413
+ ```

1

編集

2019/05/02 16:22

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ###chainerでLSTMを実装してsin波を学習したがうまくいかない
2
2
 
3
- コードは以下です。分類でないのにclassifierでラップしてしまったのでそこらへんで実装にミスがあると思うのですが…
3
+ コードは以下です。分類でないのにclassifierでラップして実装ようとしているのでそこらへんで実装にミスがあると思うのですが…
4
4
 
5
5
 
6
6