neon icon indicating copy to clipboard operation
neon copied to clipboard

Error serializing model when a layer is initialized by Array or Constant

Open ylhsieh opened this issue 8 years ago • 0 comments

Code snippet

# pretrained_vectors is a numpy ndarray of size 10000 x 300
init_pretrained = Array(pretrained_vectors)

layers = [
    # No error
    # LookupTable(vocab_size=10000, embedding_dim=300, init=GlorotUniform()),
    # Error
    LookupTable(vocab_size=10000, embedding_dim=300, init=init_pretrained),
    ...]
model = Model(layers=layers)

When using GlorotUniform() for init, there is no error when serializing the model. But using Array causes these errors after the first epoch, when neon is trying to serialize:

File "./classify_clp.py", line 347, in <module>
    model.fit(train_set, optimizer=optimizer, num_epochs=args.epochs, cost=cost, callbacks=callbacks)
File "/usr/local/lib/python2.7/dist-packages/neon/models/model.py", line 151, in fit
    callbacks.on_epoch_end(self.epoch_index)
  File "/usr/local/lib/python2.7/dist-packages/neon/callbacks/callbacks.py", line 269, in on_epoch_end
    c.on_epoch_end(self.callback_data, self.model(), epoch)
  File "/usr/local/lib/python2.7/dist-packages/neon/callbacks/callbacks.py", line 494, in on_epoch_end
    save_obj(model.serialize(keep_states=True), self.save_path)
  File "/usr/local/lib/python2.7/dist-packages/neon/models/model.py", line 406, in serialize
    pdict = self.get_description(get_weights=True, keep_states=keep_states)
  File "/usr/local/lib/python2.7/dist-packages/neon/models/model.py", line 292, in get_description
    keep_states=keep_states)
  File "/usr/local/lib/python2.7/dist-packages/neon/layers/container.py", line 77, in get_description
    keep_states=keep_states))
  File "/usr/local/lib/python2.7/dist-packages/neon/layers/layer.py", line 518, in get_description
    serial_dict = super(ParameterLayer, self).get_description()
  File "/usr/local/lib/python2.7/dist-packages/neon/layers/layer.py", line 241, in get_description
    return super(Layer, self).get_description(**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/neon/__init__.py", line 111, in get_description
    config[arg] = self.__dict__[arg].get_description()
  File "/usr/local/lib/python2.7/dist-packages/neon/initializers/initializer.py", line 57, in get_description
    desc = super(Array, self).get_description()
  File "/usr/local/lib/python2.7/dist-packages/neon/__init__.py", line 109, in get_description
    if self.__dict__[arg] != defaults[arg]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

ylhsieh avatar May 26 '16 09:05 ylhsieh