質問編集履歴

4

修正

2019/04/28 16:27

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -57,16 +57,6 @@
57
57
  valid,test = split_dataset_random(valid_test,n_valid,seed=0)
58
58
 
59
59
 
60
-
61
- c = np.zeros(3)
62
-
63
- for i in range(n_train):
64
-
65
- c[int(train[i][1])] += 1
66
-
67
-
68
-
69
- print(c)
70
60
 
71
61
 
72
62
 

3

修正

2019/04/28 16:27

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -132,6 +132,8 @@
132
132
 
133
133
  from chainer.training import extensions
134
134
 
135
+ trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
136
+
135
137
  trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
136
138
 
137
139
  ```

2

修正

2019/04/28 16:26

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -132,7 +132,7 @@
132
132
 
133
133
  from chainer.training import extensions
134
134
 
135
- trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
135
+ trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
136
136
 
137
137
  ```
138
138
 

1

追記

2019/04/28 16:25

投稿

sodiumplus3
sodiumplus3

スコア71

test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,143 @@
3
3
 
4
4
 
5
5
  Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
6
+
7
+
8
+
9
+ サンプル置いときます。
10
+
11
+ ```
12
+
13
+ import chainer
14
+
15
+ import chainer.functions as F
16
+
17
+ import chainer.links as L
18
+
19
+ import numpy as np
20
+
21
+ import matplotlib.pyplot as plt
22
+
23
+
24
+
25
+ from sklearn.datasets import load_iris
26
+
27
+ x,t = load_iris(return_X_y=True)
28
+
29
+ x = x.astype('float32')
30
+
31
+ t = t.astype('int32')
32
+
33
+
34
+
35
+ from sklearn.preprocessing import StandardScaler
36
+
37
+ sc = StandardScaler()
38
+
39
+ sc.fit(x)
40
+
41
+ sc.transform(x)
42
+
43
+
44
+
45
+ from chainer.datasets import TupleDataset,split_dataset_random
46
+
47
+ dataset = TupleDataset(x,t)
48
+
49
+ n_train = int(len(dataset)*0.7)
50
+
51
+ n_valid = int(len(dataset)*0.2)
52
+
53
+
54
+
55
+ train,valid_test = split_dataset_random(dataset,n_train,seed=0)
56
+
57
+ valid,test = split_dataset_random(valid_test,n_valid,seed=0)
58
+
59
+
60
+
61
+ c = np.zeros(3)
62
+
63
+ for i in range(n_train):
64
+
65
+ c[int(train[i][1])] += 1
66
+
67
+
68
+
69
+ print(c)
70
+
71
+
72
+
73
+ from chainer import iterators
74
+
75
+ batch_size = 5
76
+
77
+ train_iter = iterators.SerialIterator(train,batch_size)
78
+
79
+ valid_iter = iterators.SerialIterator(valid,batch_size,shuffle=False,repeat=False)
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+ class Net(chainer.Chain):
88
+
89
+ def __init__(self,n_mid=10,n_out=3):
90
+
91
+ super(Net,self).__init__()
92
+
93
+ with self.init_scope():
94
+
95
+ self.l1 = L.Linear(None,n_mid)
96
+
97
+ self.l2 = L.Linear(n_mid,n_mid)
98
+
99
+ self.l3 = L.Linear(n_mid,n_out)
100
+
101
+
102
+
103
+ def forward(self,x):
104
+
105
+ h = F.relu(self.l1(x))
106
+
107
+ h = F.relu(self.l2(h))
108
+
109
+ h = self.l3(h)
110
+
111
+ return h
112
+
113
+
114
+
115
+ from chainer import optimizers,training
116
+
117
+ predictor = Net()
118
+
119
+ net = L.Classifier(predictor)
120
+
121
+ print(net.predictor)
122
+
123
+ optimizer = optimizers.SGD().setup(net)
124
+
125
+ updater = training.StandardUpdater(train_iter,optimizer,device=-1)
126
+
127
+ from chainer.training.triggers import EarlyStoppingTrigger
128
+
129
+ trainer = training.Trainer(updater,(25,'epoch'),out='results/iris_result')
130
+
131
+
132
+
133
+ from chainer.training import extensions
134
+
135
+ trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
136
+
137
+ ```
138
+
139
+ ```
140
+
141
+ trainer.run()
142
+
143
+ ```
144
+
145
+ これらをセルを分けて実行すると質問の状況が得られます。