使用Keras构建LSTM序列分类模型时遇Unicode解码错误求助
LSTM模型拟合时的Unicode解码错误排查
问题背景
用Keras构建LSTM神经网络做序列分类任务,拟合模型时触发错误。已确认LSTM的input_shape正确(已转成3D张量),但无法理解错误信息,无法推进。输入数据为CSV文件,第0列是时间帧,无需使用。
数据处理代码
# 加载电压数据和balanceadorOn值 x = pd.read_csv('5 abril 2022.csv', usecols=[1], engine='python') x = x.values y = pd.read_csv('5 abril 2022.csv', usecols=[2], engine='python') y = y.values # 归一化电压数据 scaler = MinMaxScaler(feature_range=(0, 1)) x = scaler.fit_transform(x) # 将输入数据重塑为LSTM要求的3D格式 x = x.reshape(1,len(x),1)
模型构建代码
# 创建LSTM模型 model = Sequential() model.add(LSTM(4,activation='relu', input_shape=(len(x),1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') model.fit(x,y,epochs = 100, batch_size = 1,verbose=2)
错误信息
> File "_pydevd_bundle/pydevd_cython.pyx", line 532, in > _pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception File "C:\Program > Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 30, in getline > lines = getlines(filename, module_globals) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 46, in getlines > return updatecache(filename, module_globals) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 137, in updatecache > lines = fp.readlines() File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\codecs.py", > line 322, in decode > (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position > 1465: invalid start byte > Traceback (most recent call last): File "C:\Program > Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\runpy.py", > line 197, in _run_module_as_main > return _run_code(code, main_globals, None, File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\runpy.py", > line 87, in _run_code > exec(code, run_globals) File "c:\program files\microsoft visual studio\2022\community\common7\ide\extensions\microsoft\python\core\debugpy\__main__.py", > line 45, in <module> > cli.main() File "c:\program files\microsoft visual studio\2022\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", > line 444, in main > run() File "c:\program files\microsoft visual studio\2022\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", > line 285, in run_file > runpy.run_path(target_as_str, run_name=compat.force_str("__main__")) File "C:\Program > Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\runpy.py", > line 288, in run_path > return _run_module_code(code, init_globals, run_name, File "C:\Program > Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\runpy.py", > line 97, in _run_module_code > _run_code(code, mod_globals, init_globals, File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\runpy.py", > line 87, in _run_code > exec(code, run_globals) File "C:\Users\34670\Desktop\UBU\Doctorado\Python\Redes > Neuronales\Balanceador01\Balanceador01.py", line 54, in <module> > File "_pydevd_bundle/pydevd_cython.pyx", line 1366, in > _pydevd_bundle.pydevd_cython.SafeCallWrapper.__call__ File "_pydevd_bundle/pydevd_cython.pyx", line 322, in > _pydevd_bundle.pydevd_cython.PyDBFrame.trace_exception File "_pydevd_bundle/pydevd_cython.pyx", line 452, in > _pydevd_bundle.pydevd_cython.PyDBFrame.handle_user_exception File "_pydevd_bundle/pydevd_cython.pyx", line 535, in > _pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception File "C:\Program > Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 30, in getline > lines = getlines(filename, module_globals) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 46, in getlines > return updatecache(filename, module_globals) File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\linecache.py", > line 137, in updatecache > lines = fp.readlines() File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\codecs.py", > line 322, in decode > (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position > 1465: invalid start byte
问题原因与解决方案
核心原因
这个错误和LSTM模型逻辑无关,是调试器(PyDev/VS Code Debugger)读取脚本文件时,遇到非UTF-8编码的字符。错误中的byte 0xa1对应Latin-1编码的¡字符,说明你的脚本文件Balanceador01.py不是以UTF-8编码保存的。
解决步骤
重新编码脚本文件
用VS Code、Notepad++等编辑器打开脚本,将编码改为UTF-8后保存:- VS Code:点击右下角编码标识(如"ISO-8859-1")→ 选择"通过编码保存"→ 选"UTF-8"。
规避调试器问题
如果暂时无法修改编码,尝试直接运行脚本(不使用调试模式),该错误通常仅在调试时触发,正常运行不受影响。CSV文件编码排查(可选)
虽然错误指向脚本,但可额外确认CSV文件编码,读取时指定编码参数:x = pd.read_csv('5 abril 2022.csv', usecols=[1], engine='python', encoding='latin-1') y = pd.read_csv('5 abril 2022.csv', usecols=[2], engine='python', encoding='latin-1')
额外优化建议
- 你当前用
loss='mse'(均方误差),但序列分类任务通常用binary_crossentropy(二分类)或categorical_crossentropy(多分类),输出层需添加对应激活函数:model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) - 输入数据形状
x.reshape(1, len(x), 1)意味着只有1个样本,训练效果极差。建议用滑动窗口将序列分割为多个样本,每个样本为一段连续子序列。
内容的提问来源于stack exchange,提问作者bardulia
相关产品推荐
相关产品推荐

