私は単純なカスタムレイヤオブジェクトを使用して、コレスキー分解によるマルチヴァーテールノーマルノイズを生成します。すべて正常に動作しますが、 'load_model'は 'ModelCheckPoint'によって保存された最良のモデルを読み込みます。カスタムレイヤオブジェクトを持つKeras 'load_model'
カスタム層である:ここ
import kears as ks
import keras.backend as K
class MVGaussianNoise(Layer):
def __init__(self, sigma_ind=None, sigma_dep=None,
noise_level=1.0, seed=None, **kwargs):
self.sigma_ind = sigma_ind
self.sigma_dep = sigma_dep
self.noise_level = noise_level
self.supports_masking = True
self.seed = seed
self._lut_ind = scipy.linalg.cholesky(self.sigma_ind)
self._lut_dep = scipy.linalg.cholesky(self.sigma_dep)
super(MVGaussianNoise, self).__init__(**kwargs)
def call(self, inputs, training=None):
def noised():
z_ind = K.random_normal(
shape=K.shape(inputs),
mean=0.0,
seed=self.seed,
stddev=1.0)
noised_ind = self.noise_level * K.dot(z_ind, self._lut_ind)
return inputs + noised_ind
return K.in_train_phase(noised, inputs, training=training)
def get_config(self):
config = {'sigma_ind': self.sigma_ind,
'sigma_dep': self.sigma_dep,
'noise_level': self.noise_level,
'seed': self.seed}
base_config = super(MVGaussianNoise, self).get_config()
return dict(list(base_config.items()) + list(config.items()))
'sigma_ind' と 'sigma_depは' タイプ 'numpy.ndarray(フロート)' である共分散を規定します。
.
.
.
File "/home/aidin/miniconda3/envs/keras-theano/lib/python2.7/site-packages/keras/utils/generic_utils.py", line 141, in deserialize_keras_object
return cls.from_config(config['config'])
File "/home/aidin/miniconda3/envs/keras-theano/lib/python2.7/site-packages/keras/engine/topology.py", line 1252, in from_config
return cls(**config)
File "hsipydeep/keraskit/noise.py", line 99, in __init__
self._lut_ind = scipy.linalg.cholesky(self.sigma_ind)
File "/home/aidin/miniconda3/envs/keras-theano/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.py", line 91, in cholesky
check_finite=check_finite)
File "/home/aidin/miniconda3/envs/keras-theano/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.py", line 37, in _cholesky
c, info = potrf(a1, lower=lower, overwrite_a=overwrite_a, clean=clean)
TypeError: float() argument must be a string or a number
その上の任意の思考:
with ks.utils.CustomObjectScope({'MVGaussianNoise': MVGaussianNoise}):
best_model = ks.models.load_model('best_model' + '.h5')
は、エラーメッセージになります:
モデルのロード?
これは問題ではないと思います。モデルを読み込んだときに、デフォルト値ではなくconfig ['config']から取得しています。 – aysa