Как передавать данные из массива numpy для обучения модели регрессии CNTK

#python-3.x #linear-regression #cntk

#python-3.x #линейная регрессия #cntk

Вопрос:

Я сгенерировал несколько случайных значений внутри одномерного массива numpy и пытаюсь передать эти данные в созданную мной модель CNTK (коды ниже) для ее обучения. Но я получаю разные ошибки в соответствии с моим подходом.

Нейронная сеть, которую я создал:

 mean = 10
stdev = 2 
x = np.random.normal(mean, stdev, 1000)
y = 2 * x   25

inputs = c.input_variable(1) #Number of variables
labels = c.input_variable(1) #Number of results
layer1 = Dense(1000, activation = c.relu) #input layer with 1000 neurons
layer2 = Dense(1000, activation = c.relu) #hidden layer with 1000 neurons
layer3 = Dense(1, activation = None) #output layer with 1 neuron
model1 = Sequential([layer1, layer2, layer3])
result = model1(inputs)
loss = c.squared_error(result, labels)
learner = c.sgd(model1.parameters, c.learning_parameter_schedule(0.01))
progress_writer = c.logging.ProgressPrinter(0) 
  

Для подхода, приведенного ниже (https://cntk.ai/pythondocs/Manual_How_to_feed_data.html ) Я получаю эту ошибку:

Ошибка времени выполнения: переменная ‘Input(‘Вход4′, [#], [1])’ Тип данных Float не соответствует типу данных соответствующего значения Double

 progress_writer = c.logging.ProgressPrinter(0)
trainer = loss.train((x,y), parameter_learners = [learner], callbacks=[progress_writer])
  

Для этого другого подхода я получаю:

Ошибка значения: аргумент non-dict (ndarray) не поддерживается для узлов с более чем одним входом

 trainer = c.Trainer(result, loss, [learner])
trainer.train_minibatch((x,y))

  

Может ли кто-нибудь мне помочь?

Ответ №1:

trainer.train_minibatch() требуется только словарь. Итак, это должно быть что-то вроде этого:

 data = {inputs: x, labels: y}
trainer.train_minibatch(data)
  

Комментарии:

1. Но входные данные и x (как и метки и y ) имеют разные размеры. Что вы предлагаете в этом случае?

2. Определите свои входные данные и метки правильной формы. входные данные = c.input_variable(shape= …) #Количество переменных labels = c.input_variable(shape= …) #Количество результатов

Ответ №2:

Я нашел это. Спасибо за подсказки @snowflake, но помимо того, что вы указали, у него была еще одна ошибка с numpy shape. Это был вектор, однако cntk работает с матрицами. Поэтому я просто изменяю его с:

 x = x.reshape(1000,1)
  

и обучен, как:

 trainer.train_minibatch({inputs: x, labels: y})