Python keras load_模型给出TypeError:int()参数';非类型';

Python keras load_模型给出TypeError:int()参数';非类型';,python,tensorflow,keras,neural-network,model,Python,Tensorflow,Keras,Neural Network,Model,我正在colab上成功地使用keras和tensorflow训练神经网络,如下所示: tf.keras.backend.clear_session() logpath_ms = './best_model.h5' modelsave_cb = tf.keras.callbacks.ModelCheckpoint(logpath_ms, monitor='val_loss', mode='min', verbose=1, save_best_only=True) model = Sequent

我正在colab上成功地使用keras和tensorflow训练神经网络,如下所示:

tf.keras.backend.clear_session()

logpath_ms = './best_model.h5'
modelsave_cb = tf.keras.callbacks.ModelCheckpoint(logpath_ms, monitor='val_loss', mode='min', verbose=1, save_best_only=True)

model = Sequential()
model.add(Bidirectional(LSTM(units=30, return_sequences=True, input_shape = (n_input,X.shape[1]) ) ))
model.add(Dropout(0.2))
model.add(AveragePooling1D(pool_size=(4), strides=4))
model.add(LSTM(units= 30 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units= 30 , return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units= 30))
model.add(Dropout(0.2))
model.add(Dense(units = 1, activation='linear'))
model.compile(optimizer='adam', loss='mean_squared_error',metrics=['mse'])

model.fit(train_generator, validation_data=val_generator, epochs=10, verbose=1,
             callbacks=[modelsave_cb])
正如您所看到的,当一个时代之后出现改进时,我使用回调保存模型。不幸的是,当我尝试在之后加载模型时,会收到错误消息:

model = load_model(logpath_ms)

TypeError                                 Traceback (most recent call last)
<ipython-input-32-ab300646bc5b> in <module>()
----> 1 model = load_model(logpath_ms)

28 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/init_ops.py in _compute_fans(shape)
   1423     fan_in = shape[-2] * receptive_field_size
   1424     fan_out = shape[-1] * receptive_field_size
-> 1425   return int(fan_in), int(fan_out)
   1426 
   1427 

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
model=load\u model(logpath\u ms)
TypeError回溯(最近一次调用上次)
在()
---->1模型=负载模型(对数路径)
28帧
/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/init_ops.py in_compute_fans(shape)
1423扇入=形状[-2]*接受区大小
1424扇形输出=形状[-1]*接受域大小
->1425返回整数(扇形输入),整数(扇形输出)
1426
1427
TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“NoneType”

这是colab笔记本的地址,这是。我认为问题可能是h5文件是空的(因为错误消息“NoneType”),但事实并非如此。文件路径中也没有输入错误,否则我会收到不同的消息。错误的原因是什么,我如何解决它?

您的模型是在TF1.x中编译的,但您正在2.x中执行它。如果您在1.X中执行,它就会工作。您可以将其放在Colab的第一行以切换版本:

%tensorflow_version 1.x

您的模型是在TF1.x中编译的,但您正在2.x中执行它。如果您在1.X中执行,它就会工作。您可以将其放在Colab的第一行以切换版本:

%tensorflow_version 1.x

太棒了,非常感谢!你知道我应该改变什么吗,这样神经网络就可以工作,并且可以使用TF2.x保存/加载?不幸的是,保存的模型实际上应该在不同版本之间兼容,但是支持有点不够。然而,这就是(据我所知)版本之间没有官方权重转换器的原因。你可以试试这样的东西。另一个显而易见的解决方案是,如果你有足够的资源,你可以自己在2.x中训练这个模型。太棒了,非常感谢!你知道我应该改变什么吗,这样神经网络就可以工作,并且可以使用TF2.x保存/加载?不幸的是,保存的模型实际上应该在不同版本之间兼容,但是支持有点不够。然而,这就是(据我所知)版本之间没有官方权重转换器的原因。你可以试试这样的东西。另一个显而易见的解决方案是,如果您有足够的资源,您可以自己在2.x中对模型进行培训。