Jupyter可加载但Python脚本加载Keras模型遇OSError求助
问题原因与解决方案
错误原因
在Windows系统下,Python字符串中的反斜杠\是转义字符。你定义的路径.\saved_models\model_test.keras中,\s会被Python解析为转义序列,导致实际生成的路径与预期不符,最终load_model无法定位到正确的模型文件。
而Jupyter环境对路径的转义处理更宽松,所以能正常加载,但Python脚本严格遵循字符串转义规则,因此触发错误。
解决方法
有三种可靠的修正方式,任选其一即可:
1. 使用正斜杠替换反斜杠
正斜杠/在Python和Windows系统中均能被正确识别,无需转义:
rel_path_model = "./saved_models/model_test.keras"
2. 使用原始字符串
在路径字符串前添加r,声明为原始字符串,此时反斜杠不会被当作转义字符:
rel_path_model = r".\saved_models\model_test.keras"
3. 使用双反斜杠
用双反斜杠\\表示单个反斜杠,避免转义解析:
rel_path_model = ".\\saved_models\\model_test.keras"
验证修改后的测试代码
将测试代码中的路径替换为上述任意一种,即可正常保存和加载模型:
import tensorflow as tf import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.models import save_model, load_model model = Sequential() model.add(Dense(64, input_dim=10, activation='relu')) model.add(Dense(32, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) data = np.random.random((1000, 10)) labels = np.random.randint(2, size=(1000, 1)) model.fit(data, labels, epochs=10, batch_size=32) # 使用原始字符串示例 rel_path_model = r".\saved_models\model_test.keras" save_model(model, rel_path_model) loaded_model = load_model(rel_path_model) # 现在脚本中可正常加载
内容的提问来源于stack exchange,提问作者paulinho
相关产品推荐
相关产品推荐

