質問編集履歴

4 修正

sodiumplus3

sodiumplus3 score 31

2019/04/29 01:27  投稿

chainerのtrainer.run()をJupiter notebookで実行したときにエラーが起こる
###trainer.run()だけを実行したい
Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
サンプル置いときます。
```
import chainer
import chainer.functions as F
import chainer.links as L
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
x,t = load_iris(return_X_y=True)
x = x.astype('float32')
t = t.astype('int32')
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x)
sc.transform(x)
from chainer.datasets import TupleDataset,split_dataset_random
dataset = TupleDataset(x,t)
n_train = int(len(dataset)*0.7)
n_valid = int(len(dataset)*0.2)
train,valid_test = split_dataset_random(dataset,n_train,seed=0)
valid,test = split_dataset_random(valid_test,n_valid,seed=0)
c = np.zeros(3)  
for i in range(n_train):  
   c[int(train[i][1])] += 1  
 
print(c)  
from chainer import iterators
batch_size = 5
train_iter = iterators.SerialIterator(train,batch_size)
valid_iter = iterators.SerialIterator(valid,batch_size,shuffle=False,repeat=False)
class Net(chainer.Chain):
   def __init__(self,n_mid=10,n_out=3):
       super(Net,self).__init__()
       with self.init_scope():
           self.l1 = L.Linear(None,n_mid)
           self.l2 = L.Linear(n_mid,n_mid)
           self.l3 = L.Linear(n_mid,n_out)
   def forward(self,x):
       h = F.relu(self.l1(x))
       h = F.relu(self.l2(h))
       h = self.l3(h)
       return h
from chainer import optimizers,training
predictor = Net()
net = L.Classifier(predictor)
print(net.predictor)
optimizer = optimizers.SGD().setup(net)
updater = training.StandardUpdater(train_iter,optimizer,device=-1)
from chainer.training.triggers import EarlyStoppingTrigger
trainer = training.Trainer(updater,(25,'epoch'),out='results/iris_result')
from chainer.training import extensions
trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
```
```
trainer.run()
```
これらをセルを分けて実行すると質問の状況が得られます。
  • Python 3.x

    16673 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    312 questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

3 修正

sodiumplus3

sodiumplus3 score 31

2019/04/29 01:26  投稿

chainerのtrainer.run()をJupiter notebookで実行したときにエラーが起こる
###trainer.run()だけを実行したい
Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
サンプル置いときます。
```
import chainer
import chainer.functions as F
import chainer.links as L
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
x,t = load_iris(return_X_y=True)
x = x.astype('float32')
t = t.astype('int32')
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x)
sc.transform(x)
from chainer.datasets import TupleDataset,split_dataset_random
dataset = TupleDataset(x,t)
n_train = int(len(dataset)*0.7)
n_valid = int(len(dataset)*0.2)
train,valid_test = split_dataset_random(dataset,n_train,seed=0)
valid,test = split_dataset_random(valid_test,n_valid,seed=0)
c = np.zeros(3)
for i in range(n_train):
   c[int(train[i][1])] += 1
print(c)
from chainer import iterators
batch_size = 5
train_iter = iterators.SerialIterator(train,batch_size)
valid_iter = iterators.SerialIterator(valid,batch_size,shuffle=False,repeat=False)
class Net(chainer.Chain):
   def __init__(self,n_mid=10,n_out=3):
       super(Net,self).__init__()
       with self.init_scope():
           self.l1 = L.Linear(None,n_mid)
           self.l2 = L.Linear(n_mid,n_mid)
           self.l3 = L.Linear(n_mid,n_out)
   def forward(self,x):
       h = F.relu(self.l1(x))
       h = F.relu(self.l2(h))
       h = self.l3(h)
       return h
from chainer import optimizers,training
predictor = Net()
net = L.Classifier(predictor)
print(net.predictor)
optimizer = optimizers.SGD().setup(net)
updater = training.StandardUpdater(train_iter,optimizer,device=-1)
from chainer.training.triggers import EarlyStoppingTrigger
trainer = training.Trainer(updater,(25,'epoch'),out='results/iris_result')
from chainer.training import extensions
trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))  
trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
```
```
trainer.run()
```
これらをセルを分けて実行すると質問の状況が得られます。
  • Python 3.x

    16673 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    312 questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

2 修正

sodiumplus3

sodiumplus3 score 31

2019/04/29 01:25  投稿

chainerのtrainer.run()をJupiter notebookで実行したときにエラーが起こる
###trainer.run()だけを実行したい
Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
サンプル置いときます。
```
import chainer
import chainer.functions as F
import chainer.links as L
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
x,t = load_iris(return_X_y=True)
x = x.astype('float32')
t = t.astype('int32')
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x)
sc.transform(x)
from chainer.datasets import TupleDataset,split_dataset_random
dataset = TupleDataset(x,t)
n_train = int(len(dataset)*0.7)
n_valid = int(len(dataset)*0.2)
train,valid_test = split_dataset_random(dataset,n_train,seed=0)
valid,test = split_dataset_random(valid_test,n_valid,seed=0)
c = np.zeros(3)
for i in range(n_train):
   c[int(train[i][1])] += 1
print(c)
from chainer import iterators
batch_size = 5
train_iter = iterators.SerialIterator(train,batch_size)
valid_iter = iterators.SerialIterator(valid,batch_size,shuffle=False,repeat=False)
class Net(chainer.Chain):
   def __init__(self,n_mid=10,n_out=3):
       super(Net,self).__init__()
       with self.init_scope():
           self.l1 = L.Linear(None,n_mid)
           self.l2 = L.Linear(n_mid,n_mid)
           self.l3 = L.Linear(n_mid,n_out)
   def forward(self,x):
       h = F.relu(self.l1(x))
       h = F.relu(self.l2(h))
       h = self.l3(h)
       return h
from chainer import optimizers,training
predictor = Net()
net = L.Classifier(predictor)
print(net.predictor)
optimizer = optimizers.SGD().setup(net)
updater = training.StandardUpdater(train_iter,optimizer,device=-1)
from chainer.training.triggers import EarlyStoppingTrigger
trainer = training.Trainer(updater,(25,'epoch'),out='results/iris_result')
from chainer.training import extensions
trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
trainer.extend(extensions.PrintReport(['epoch', 'iteration', 'main/loss', 'main/accuracy'])))
```
```
trainer.run()
```
これらをセルを分けて実行すると質問の状況が得られます。
  • Python 3.x

    16673 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    312 questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

1 追記

sodiumplus3

sodiumplus3 score 31

2019/04/29 01:23  投稿

chainerのtrainer.run()をJupiter notebookで実行したときにエラーが起こる
###trainer.run()だけを実行したい
Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
Chainerで適当な機械学習モデルを組んで、jupyter notebook上で単独セルで`trainer.run()`を実行すると、1回目は問題なく実行されますが、2回目以降そのセルの実行時に`RuntimeError: cannot run training loop multiple times`が出てしまいます。毎回Restart & Run allを実行しなければならないのでしょうか?
サンプル置いときます。
```
import chainer
import chainer.functions as F
import chainer.links as L
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
x,t = load_iris(return_X_y=True)
x = x.astype('float32')
t = t.astype('int32')
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x)
sc.transform(x)
from chainer.datasets import TupleDataset,split_dataset_random
dataset = TupleDataset(x,t)
n_train = int(len(dataset)*0.7)
n_valid = int(len(dataset)*0.2)
train,valid_test = split_dataset_random(dataset,n_train,seed=0)
valid,test = split_dataset_random(valid_test,n_valid,seed=0)
c = np.zeros(3)
for i in range(n_train):
   c[int(train[i][1])] += 1
print(c)
from chainer import iterators
batch_size = 5
train_iter = iterators.SerialIterator(train,batch_size)
valid_iter = iterators.SerialIterator(valid,batch_size,shuffle=False,repeat=False)
class Net(chainer.Chain):
   def __init__(self,n_mid=10,n_out=3):
       super(Net,self).__init__()
       with self.init_scope():
           self.l1 = L.Linear(None,n_mid)
           self.l2 = L.Linear(n_mid,n_mid)
           self.l3 = L.Linear(n_mid,n_out)
   def forward(self,x):
       h = F.relu(self.l1(x))
       h = F.relu(self.l2(h))
       h = self.l3(h)
       return h
from chainer import optimizers,training
predictor = Net()
net = L.Classifier(predictor)
print(net.predictor)
optimizer = optimizers.SGD().setup(net)
updater = training.StandardUpdater(train_iter,optimizer,device=-1)
from chainer.training.triggers import EarlyStoppingTrigger
trainer = training.Trainer(updater,(25,'epoch'),out='results/iris_result')
from chainer.training import extensions
trainer.extend(extensions.LogReport(trigger=(1,'epoch'),log_name='log'))
```
```
trainer.run()
```
これらをセルを分けて実行すると質問の状況が得られます。
  • Python 3.x

    16673 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    312 questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る