0

Recently, I run the code released by other authors. They utilized chainer v1.3, but I installed v4. When I run the code, it errors that Attribute Errors: MomentSGD optimizer has no attribute prepare. Here I post the codes of this part:

class BaseModel(chainer.Chain):
  loss     = None
  accuracy = None
  gpu_mode = False
  _train   = False
  def __call__(self, *arg_list, **arg_dict):
    raise NotImplementedError()
  def clear(self):
    self.loss = None
    self.accuracy = None
  def train(self, data, optimizer):
    self._train = True
    optimizer.update(self, data)
    if self.accuracy is None:
        return float(self.loss.data)
    else:
        return float(self.loss.data), float(self.accuracy.data)
  def validate(self, data):
    self._train = False
    self(data)
    if self.accuracy is None:
        return float(self.loss.data)
    else:
        return float(self.loss.data), float(self.accuracy.data)
  def test(self, data):
    self._train = False
    raise NotImplementedError()
  def save(self, fname):
    serializers.save_hdf5(fname, self)
  def load(self, fname):
    serializers.load_hdf5(fname, self)
  def cache(self):
    self.to_cpu()
    cached_model = self.copy()
    self.to_gpu()
    return cached_model
  # this part is the error part
  def setup(self, optimizer):
    self.to_gpu()
    optimizer.target = self
    optimizer.prepare()
  def to_cpu(self):
    if not self.gpu_mode:
        return
    super(BaseModel, self).to_cpu()
    self.gpu_mode = False
  def to_gpu(self):
    if self.gpu_mode:
        return
    super(BaseModel, self).to_gpu()
    self.gpu_mode = True

1 Answers1

0

Newer version of chainer uses setup method to initialize optimizer.

Can you try modifing your code as follows?

  def setup(self, optimizer):
    self.to_gpu()
    optimizer.setup(self)
corochann
  • 1,604
  • 1
  • 13
  • 24