Незначительная ошибка в Keras: неверное исправление ValueError? - PullRequest
0 голосов
/ 05 июля 2018

Я тренировал модель Keras, однако мне сложно прогнозировать ее. Мой входной массив имеет форму (400,2), а выходной массив имеет форму (400,1). Теперь, когда я передаю аргумент array([1,2]) в функцию model.predict(), я получаю следующую ошибку:

 ValueError: Error when checking input: expected dense_1_input to have shape (2,) but got array with shape (1,).

Что бессмысленно, поскольку shape(array([1,2])) = (2,) и, следовательно, функция model.predict должна принимать его как допустимый ввод.

Напротив, когда я передаю массив формы (1,2), он работает чисто. Так есть ли ошибка в реализации Keras?

Моя модель выглядит следующим образом:

from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
import numpy as np

data = np.random.rand(400,2)
Y = np.random.rand(400,1)

def base():
    model = Sequential()
    model.add(Dense(4,activation = 'tanh', input_dim = 2))
    model.add(Dense(1, activation = 'sigmoid'))
    model.compile(optimizer = optimizers.RMSprop(lr = 0.1), loss = 'binary_crossentropy', metrics= ['accuracy'])      
    return model 

model = base()
model.fit(data,Y, epochs = 10, batch_size =1)
model.predict(np.array([1,2]).reshape(2,1))   #Error
model.predict(np.array([1,2]).reshape(2,)) #Error
model.predict(np.array([1,2]).reshape(1,2)) #Works

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Первым измерением является размер партии. Поэтому вы должны передать массив в форме (num_samples,) + (the input shape of network), даже если вы используете метод predict. Вот почему, когда вы передаете массив с формой (1,2), он работает, так как (1,) указывает число выборок, а (2,) - это входная форма сети.

0 голосов
/ 05 июля 2018

Если модель ожидает массив (2,), вы должны передать (2,) массив фигур

x = x.reshape((2,))
model.predict(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...