sklearn usewarning / Process finished with exit code 245 (python)

1.第一个报错

报错信息

/home/disk1/lstm/venv/lib/python3.8/site-packages/sklearn/base.py:329: UserWarning: Trying to unpickle estimator MinMaxScaler from version 0.24.2 when using version 0.23.2. This might lead to breaking code or invalid results. Use at your own risk.
warnings.warn(

Process finished with exit code 245

报错解释

在使用版本0.23.2时,尝试从版本0.24.2取消勾选estimator MinMaxScaler 。
这会导致代码中断或者结果无效。使用风险自负。
程序完成,退出代码245.

报错分析

这个报错是sklearn版本的问题。即模型训练时的sklearn版本 0.24.2 和模型调用时的sklearn版本0.23.2不匹配。
版本不对的时候也会报下面的错误:
AttributeError: ‘MinMaxScaler’ object has no attribute ‘clip’

解决方法

匹配训练、调用模型的sklearn版本。
要么把训练模型的sklearn版本将为0.23.2;要么把调用模型的sklearn版本升级为 0.24.2 。
我的解决方法是把调用模型的python工程sklearn环境升级版本,如下:
pip install scikit-learn==0.24.0
然后就不报use warning了,但是还有Process finished with exit code 245。

2.第二个报错

报错信息

/home/disk1/core/model.py:38: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify ‘dtype=object’ when creating the ndarray

Process finished with exit code 245

报错解释

可见的不推荐使用的警告:不推荐使用不规则(ragged)嵌套(nested)序列(即具有不同长度或形状的列表或列表元组、元组或数据数组)创建数据数组。如果要执行此操作,则必须在创建数据阵列时指定“dtype=object”。

报错分析

在使用不同长度或形状的序列创建数组,执行numpy.array(sequence)时,要对数据转为object格式,即改为:

numpy_s = numpy.array(sequence, dtype=object)

更改后,不再有warning。
但是245的代码退出还没解决。
最后245退出的问题解决方法:
在py文件中加入下面两句:

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

STATUS 245: the specified policy is not of the correct client type
还是没解决,只维持了两天。
不知道是不是和内存有关系,是不是代码有需要优化得地方,运行一段时间内存满了所以退出?
打算用守护进程来变相解决这个问题了。
我觉得是内存泄漏的问题。因为我观察程序每次被调用,占用的内存就会增长,然后到达4-5GB就会以245退出。

3. IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

这是一个低级错误,原因是因为我使用了sklearn的from sklearn.preprocessing import MinMaxScaler,把数据归一化后,他输出的是array,不再是dataframe,所以后面我使用dataframe的一些属性方法就会报这个错误了。
solution:
通过df = pd.DataFrame(df)转一下。

### 处理Python程序正常结束时显示 'Process finished with exit code 0' 当提到 `exit code` 的时候,通常是指操作系统返回给调用环境的状态码。对于大多数编程语言来说,退出状态码为 `0` 表明程序成功执行完毕[^1]。 然而,在某些情况下,开发者可能希望自定义这个行为或者捕获并处理特定事件来改变默认的行为。如果目标是在控制台应用程序中隐藏此消息,则需要注意该信息实际上是由IDE(集成开发环境)或其他运行脚本的方式打印出来的,并不是由Python本身直接产生的输出。因此,要完全消除这条消息取决于使用的具体工具链配置。 为了确保所有非守护线程完成工作而不影响主进程关闭的时间点,可以考虑如下方法: #### 方法一:显式加入主线程等待 通过调整代码逻辑让主线程等待其他子线程结束后再继续向前推进,这样就可以避免因为主线程提前终止而导致的异常情况发生。可以通过设置合适的超时时间参数来实现这一点: ```python import threading from time import sleep def worker(): print('Worker thread started') sleep(2) # Simulate some work being done. print('Worker thread finished') if __name__ == '__main__': t = threading.Thread(target=worker) t.start() # Wait for the worker thread to finish before exiting main process. t.join() print("Main process ends.") ``` 这种方法能够有效地防止由于存在活动中的非守护线程而引起的意外崩溃或资源泄漏问题。 #### 方法二:将额外的任务作为守护线程启动 另一种策略是创建守护线程而不是常规线程。守护线程会在主程序准备退出的时候自动被杀死,不会阻止整个应用的停止过程。这适用于那些不需要严格保证其生命周期的应用场景下的后台任务管理。 ```python t.daemon = True # Set new threads as daemon threads. t.start() ``` 以上两种方式都可以帮助更好地管理和同步多线程之间的关系,从而减少不必要的错误提示以及潜在的风险。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值