CNN预测结果存入DataFrame出现嵌套括号问题及解决咨询
解决CNN预测结果双层/单层括号的问题
我太懂你这个困扰了!之前用Keras/TensorFlow的模型做预测时,也被model.predict返回的数组维度坑过好几次😅
问题根源
model.predict默认是为批量输入设计的——哪怕你只传入一张图片,它也会返回一个二维数组(形状类似[[预测值]])。你之前改成prediction[0]只是拿到了单样本的一维数组(比如[预测值]),所以还剩一层括号。
彻底去除括号的几种方法
根据你的场景,直接在收集结果时处理最高效,给你几个实用方案:
1. 直接索引到标量(最直观)
如果你的模型是单输出(比如回归任务、二分类的概率输出),直接取二维数组的第二个索引就能拿到纯数字:
for img in glob.glob(test_img): prediction = model.predict(prepare(img)) # 从[[x]]直接取x result.append(prediction[0][0])
2. 使用.item()方法(更简洁)
对于单元素的numpy数组,.item()可以直接提取里面的标量值,不管是二维还是一维都能用:
for img in glob.glob(test_img): prediction = model.predict(prepare(img)) result.append(prediction.item())
3. 扁平化数组后取第一个元素
如果不确定数组维度,用.flatten()把数组压成一维,再取第一个元素也能解决:
for img in glob.glob(test_img): prediction = model.predict(prepare(img)) result.append(prediction.flatten()[0])
额外方案:如果已经生成DataFrame再处理
要是你已经生成了带一维括号的DataFrame,也可以用apply快速处理:
temp['Prediction'] = temp['Prediction'].apply(lambda x: x[0])
这样处理后,你的Prediction列就只会显示纯数字,再也没有烦人的括号啦!
内容的提问来源于stack exchange,提问作者Guanlin Chen
相关产品推荐
相关产品推荐

