入门尺寸误差在OpenCV中MNIST上工作的数据集,而

问题描述 投票:0回答:1

我使用的OpenCV和ML模块训练的MLP。我收到一个未知错误,我不是能够解决它:

“错误:OpenCV的(3.4.3)/io/opencv/modules/ml/src/data.cpp:257:错误:(-215:断言失败)samples.type()== CV_32F || samples.type() ==在功能CV_32S '使用setData'”

这里是我的代码:

    from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train.shape, y_train.shape
import numpy as np
np.unique(y_train)
import matplotlib.pyplot as plt
%matplotlib inline
for i in range(10):
  plt.subplot(2, 5, i+1)
  plt.imshow(X_train[i, :, :], cmap='gray')
  plt.axis('off')
from sklearn.preprocessing import OneHotEncoder
enc=OneHotEncoder(sparse=False, dtype=np.float32)
y_train_pre=enc.fit_transform(y_train.reshape(-1,1))
y_test_pre=enc.fit_transform(y_test.reshape(-1,1))
X_train_pre=X_train.reshape((X_train.shape[0], -1))
X_train_pre=X_train.astype(np.float32) /255.0
X_test_pre=X_test.reshape((X_test.shape[0], -1))
X_test_pre=X_test.astype(np.float32) / 255.0
import cv2
mlp=cv2.ml.ANN_MLP_create()
mlp.setLayerSizes(np.array([784, 512, 512, 10]))
mlp.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM, 2.5, 1.0)
mlp.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)
mlp.setBackpropWeightScale(0.00001)
term_mode= (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS)
term_max_iter=10
term_eps=0.01
mlp.setTermCriteria((term_mode, term_max_iter, term_eps))
mlp.train(X_train_pre, cv2.ml.ROW_SAMPLE, y_train_pre)

我跑最后一个单元格后,得到了错误。这意味着虽然训练!我不能修复它,但他们的东西与层的大小有关系吗?或类型转换使用numpy的?如果你们可以指导我,它会帮助我。在此先感谢球员。

python opencv tensorflow machine-learning keras
1个回答
1
投票

图像需要是1D向量,但它们被放置在具有形状[28,28]。例如,这将重塑图像和将工作:

mlp.train(X_train_pre.reshape(60000,-1), cv2.ml.ROW_SAMPLE, y_train_pre)
© www.soinside.com 2019 - 2024. All rights reserved.