You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用keras.predict()时出现cp950编码错误,求解决方案

问题排查与解决

错误根源分析

这个编码错误并非keras.predict()的计算逻辑问题,而是控制台输出编码不兼容导致的:

  • 系统默认控制台编码为CP950(繁体中文编码),而model.summary()输出包含Unicode字符\u2501(水平细线━),该字符不在CP950编码范围内,触发编码失败。
  • 同时存在输入形状不匹配问题:模型第二个输入要求(None, 93, 128),但你将v2reshape为(1, 93, 128, 1),编码问题解决后会引发新的形状不匹配错误。

解决方案

1. 修复控制台编码问题(优先处理)

在代码最开头添加以下代码,强制Python控制台输出使用UTF-8编码:

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

2. 修正输入形状不匹配

将v2的reshape代码修改为符合模型输入要求的形状:

# 原错误代码
# v2 = vggish_features.reshape(1, vggish_features.shape[0], vggish_features.shape[1], 1)
# 修改为
v2 = vggish_features.reshape(1, vggish_features.shape[0], vggish_features.shape[1])

3. 替代方案(无需修改编码时使用)

如果不需要查看model.summary()的输出,直接注释掉该行,跳过包含特殊字符的打印操作:

# model.summary()  # 注释该行以避免触发编码错误

修改后完整代码示例

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

import keras

def record_audio(sr, duration):
    # 你的音频录制逻辑
    pass

def process_audio(audio_data, sr):
    # 你的音频处理逻辑
    pass

def vggish(audio_data):
    # 你的vggish特征提取逻辑
    pass

if __name__ == "__main__":
    sr = 16000  # 根据实际情况调整采样率
    duration = 5  # 根据实际情况调整录制时长

    audio_data = record_audio(sr, duration)
    processed_audio = process_audio(audio_data, sr)

    print("shape", processed_audio.shape)  
    model = keras.saving.load_model("LSTM_P_CNN//LSTM_P_CNN.keras")
    print(0)
    vggish_features = vggish(audio_data).numpy()
    print(1)
    print(vggish_features.shape)
    print("Model Input Shape:", model.input_shape)
    print("Model Output Shape:", model.output_shape)
    v1 = vggish_features.reshape(1, vggish_features.shape[0], vggish_features.shape[1], 1)
    # 修正v2的形状
    v2 = vggish_features.reshape(1, vggish_features.shape[0], vggish_features.shape[1])
    print(type(v1))
    try:
        model.summary()
        x = model.predict([v1, v2])
        print(x)
        print(type(x))
    except Exception as e:
        print("An error occurred:", e)

内容的提问来源于stack exchange,提问作者學店魔人

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:20:17