質問編集履歴
4
修正
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
修正
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
修正
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.
|
135
|
+
trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
|
136
136
|
|
137
137
|
```
|
138
138
|
|
1
追記
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
|
+
これらをセルを分けて実行すると質問の状況が得られます。
|