2017-01-11 2 views
2

Могу ли я узнать, почему возникает ошибка, а также мне нужна помощь, чтобы запустить этот проект?Что и почему "TypeError: Требуемый аргумент 'layout' (pos 2) not found" ошибка в Python ??

Когда я печатаю

python mlp_training.py 

Я получаю ошибку

Loading training data... 
(0, 38400) 
(0, 4) 
Loading image duration: 0.000199834 
Training MLP ... 
Traceback (most recent call last): 
    File "mlp_training.py", line 49, in <module> 
    num_iter = model.train((train, (train_labels), (params))) 
TypeError: Required argument 'layout' (pos 2) not found 

КОДА

__author__ = 'zhengwang' 

import cv2 
import numpy as np 
import glob 

print 'Loading training data...' 
e0 = cv2.getTickCount() 

# load training data 
image_array = np.zeros((1, 38400)) 
label_array = np.zeros((1, 4), 'float') 
training_data = glob.glob('training_data/*.npz') 

for single_npz in training_data: 
with np.load(single_npz) as data: 
    print data.files 
    train_temp = data['train'] 
    train_labels_temp = data['train_labels'] 
    print train_temp.shape 
    print train_labels_temp.shape 
image_array = np.vstack((image_array, train_temp)) 
label_array = np.vstack((label_array, train_labels_temp)) 

train = image_array[1:, :] 
train_labels = label_array[1:, :] 
print train.shape 
print train_labels.shape 

e00 = cv2.getTickCount() 
time0 = (e00 - e0)/ cv2.getTickFrequency() 
print 'Loading image duration:', time0 

# set start time 
e1 = cv2.getTickCount() 

# create MLP 
layer_sizes = np.int32([38400, 32, 4]) 
model = cv2.ml.ANN_MLP_create() 
model.setLayerSizes(layer_sizes) 
criteria = (cv2.TERM_CRITERIA_COUNT | cv2.TERM_CRITERIA_EPS, 500, 0.0001) 
criteria2 = (cv2.TERM_CRITERIA_COUNT, 100, 0.001) 
params = dict(term_crit = criteria, 
      train_method = cv2.ml.ANN_MLP_BACKPROP, 
      bp_dw_scale = 0.001, 
      bp_moment_scale = 0.0) 

print 'Training MLP ...' 
num_iter = model.train((train, (train_labels), (params))) 

# set end time 
e2 = cv2.getTickCount() 
time = (e2 - e1)/cv2.getTickFrequency() 
print 'Training duration:', time 

# save param 
model.save('mlp_xml/mlp.xml') 

print 'Ran for %d iterations' % num_iter 

ret, resp = model.predict(train) 
prediction = resp.argmax(-1) 
print 'Prediction:', prediction 
true_labels = train_labels.argmax(-1) 
print 'True labels:', true_labels 

print 'Testing...' 
train_rate = np.mean(prediction == true_labels) 
print 'Train rate: %f:' % (train_rate*100) 

Я использую питона. Я использую OpenCV 3.2.0. Язык, который я изучаю, - это C++, но для проекта, который я делаю в python. Прости.

Ссылка на страницу GitHub является https://github.com/hamuchiwa/AutoRCCar

ВСЕ КРЕДИТЫ кода ЕГО ВЛАДЕЛЬЦА. Я просто скопировал код и изменил его здесь и там, чтобы заполнить мои потребности.

ПОЖАЛУЙСТА, не стесняйтесь задавать вопросы, я действительно нуждается решаемые

Моя система:

Ubuntu 16.04 LTS

+1

'model.train()' нуждается в 2 аргументах. Вы предоставили только 1 i.e кортеж. – MYGz

ответ

0

Похоже, вы обеспечиваете неправильное количество аргументов в train метода класса ANN_MLP OpenCV. Требуется не менее 3. Вот docs Проверьте правильность.

Сама проблема на этой линии:

print 'Training MLP ...' 
num_iter = model.train((train, (train_labels), (params))) 

Вы посылаете один кортеж в него. (Кортежей в Python выглядеть следующим образом: (1,2,3)) Вы можете попытаться изменить его выглядеть следующим образом:

print 'Training MLP ...' 
num_iter = model.train(train, train_labels, params) 

Но я как-то сомневаюсь, что это будет только исправить нужно, чтобы сделать его работу.

EDIT: Я неправильно посмотрел документы для более старой версии. Похоже, вы пытаетесь использовать один из перегруженных методов train, которым требуется один аргумент из нового OpenCV, но привязки python могут быть отключены, и как-то python думает, что вы пытаетесь использовать метод [2/3] от these docs

+0

Да я сделал изменения, как у предложил, но я тогда получаю эту ошибку
'обучающих данных Загрузка ... (0, 38400) (0, 4) длительность изображения Загрузка: 0,000199966 Обучение MLP ... Traceback (самый последний вызов последнего): Файл "mlp_training.py", строка 49, в num_iter = model.train (поезд, train_labels, PARAMS) TypeError: только массивы длина-1 могут быть преобразованы в Python scalars'
сейчас что я делаю ?? –

+0

@CarlMccarry К сожалению, нет никакой серебряной пули для вашей проблемы, вам нужно будет прочитать источник привязки Python OpenCV, чтобы понять, что происходит, более или менее. Поэтому я думаю, вам придется немного изучить python, чтобы сделать ваш проект –

Смежные вопросы