Machine learning TfLearn混淆矩阵培训在std::bad_alloc上终止

Machine learning TfLearn混淆矩阵培训在std::bad_alloc上终止,machine-learning,tensorflow,scikit-learn,confusion-matrix,tflearn,Machine Learning,Tensorflow,Scikit Learn,Confusion Matrix,Tflearn,在使用TFLearn创建卷积神经网络时,在解决如何获得混淆矩阵方面存在问题。我目前掌握的守则如下: 来自未来导入部门,打印功能,绝对导入 导入tflearn 从tflearn.layers.core导入输入数据,退出,完全连接 从tflearn.layers.conv导入conv_2d、max_pool_2d 从tflearn.layers.normalization导入本地\u响应\u规范化 从tflearn.layers.estimator导入回归 从sklearn.metrics导入混淆矩

在使用TFLearn创建卷积神经网络时,在解决如何获得混淆矩阵方面存在问题。我目前掌握的守则如下:

来自未来导入部门,打印功能,绝对导入
导入tflearn
从tflearn.layers.core导入输入数据,退出,完全连接
从tflearn.layers.conv导入conv_2d、max_pool_2d
从tflearn.layers.normalization导入本地\u响应\u规范化
从tflearn.layers.estimator导入回归
从sklearn.metrics导入混淆矩阵
进口h5py
hdf5Test=h5py.File('/path',r')
X=hdf5Test['X']
Y=hdf5Test['Y']
#构建卷积网络
网络=输入数据(形状=[None,240,320,3],名称='input')
网络=conv_2d(网络,32,3,激活='relu',正则化器='L2”)
网络=最大池2d(网络,2)
网络=本地响应标准化(网络)
网络=conv_2d(网络,64,3,激活='relu',正则化器='L2”)
网络=最大池2d(网络,2)
网络=本地响应标准化(网络)
网络=完全连接(网络,128,激活='tanh')
网络=辍学(网络,0.8)
网络=完全连接(网络,256,激活='tanh')
网络=辍学(网络,0.8)
网络=完全连接(网络,2,激活='softmax')
网络=回归(
网络,,
优化器='sgd',
学习率=0.01,
损失class='classifical_crossentropy',
name='target'
)
#训练
model=tflearn.DNN(网络,tensorboard_verbose=0)
model.load(“/path.tflearn”)
预测=模型。预测(X)
打印(矩阵(Y,预测))
每次我尝试运行此代码时,都会收到以下错误消息:

在抛出“std::bad_alloc”实例后调用terminate 什么():std::坏的 中止(堆芯转储)


任何建议都是很好的,对TFLearn来说都是新的。

最后,它发现这是由于我试图预测的数据的大小。我通过将其插入循环中修复了此问题:

# Predict Classes
predictions = []
count = 0
length = len(X)
for line in X:
  print('Line ' + str(count) + ' of ' + str(length))
  tmp = model.predict_label([line])
  predictions.append(tmp[0])
  count += 1
通过一些格式设置,我可以使用Sklearn生成混淆矩阵:

predictedClasses = np.argmin(predictions, axis=1)
actualClasses = np.argmax(Y, axis=1)
print(confusion_matrix(actualClasses, predictedClasses))

这种方法对我有用,也可能对你有用。。。我认为TFLearn应该研究一种简化的方法来生成混淆矩阵,这样其他人就不会有同样的问题。

您可以添加一些或您的数据,或代码来生成相同形状的合成数据吗?当包含MWE时,回答问题要容易得多。此外,如果可以包含完整的堆栈跟踪,则可能更容易诊断问题的来源。我使用的数据集是。在3个通道上,每个图像为240*320。从数据集中随机抽取9679张图像进行测试。@ncfirth这是我得到的完整堆栈跟踪。