我将Keras与scikit-optimize结合使用,这意味着对于后者的每次迭代,都会创建,训练和测试新的Keras模型。在我开始使用带有GRU(或LSTM)单元的reccurent模型之前,它工作正常。现在在第一次迭代(完成没有问题)之后,我收到以下错误:
File "C:\...\my_script.py", line 157, in <module>
n_calls=bayesian_iterations, x0=default_parameters)
File "C:\ProgramData\Anaconda3\lib\site-packages\skopt\optimizer\gp.py", line 228, in gp_minimize
callback=callback, n_jobs=n_jobs)
File "C:\ProgramData\Anaconda3\lib\site-packages\skopt\optimizer\base.py", line 253, in base_minimize
next_y = func(next_x)
File "C:\...\my_script.py", line 121, in compute_cost
model = train_model(args,X_train,y_train,n_epochs=n_epochs)
File "C:\...\my_script.py", line 96, in train_model
activation='elu',alpha=alpha,l2_alpha=l2_alpha)
File "C:\...\my_script.py", line 63, in create_model
x = GRU(units=n_neurons,activation=activation,return_sequences=True)(x)
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\layers\recurrent.py", line 499, in __call__
return super(RNN, self).__call__(inputs, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 619, in __call__
output = self.call(inputs, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\layers\recurrent.py", line 1628, in call
initial_state=initial_state)
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\layers\recurrent.py", line 564, in call
if len(initial_state) != len(self.states):
File "C:\ProgramData\Anaconda3\lib\site-packages\keras\layers\recurrent.py", line 401, in states
num_states = len(self.cell.state_size)
TypeError: object of type 'numpy.int32' has no len()
目前我使用:
K.reset_uids()
K.clear_session()
虽然在使用经常性网络之前我没有使用reset_uid()
并且它工作正常,但我只是试着看它是否改善了我的情况,但它没有。我不认为这是正常的行为,但我需要一个快速的解决方案,我认为如果有一种方法可以完全重置Keras它会工作(因为它在第一次迭代工作没有问题)。我尝试使用from importlib import reload
然后使用reload(keras)
但它没有改变(虽然我使用from keras import something
分别导入Keras模块,所以我不知道这是否会改变)。我无法找到完全重置Keras的方法,因此我的问题就在这里。