Оценка тренировочных и тестовых массивов разных размеров с Keras - PullRequest
0 голосов
/ 17 марта 2019

У меня есть тренировочные функции и массивы тестовых функций, каждая из которых состоит из двух столбцов, а метки обучения и метки тестирования - по три столбца.После предсказания метки теста из двух столбцов мне возвращается массив из трех столбцов.Попытка выполнить evaluate() вызывает исключение ValueError: Error when checking input: expected dense_30_input to have shape (2,) but got array with shape (3,).Я не понимаю, потому что я хочу, чтобы оценить массив формы 3?Ниже приведен код:

import keras
from keras.models import Sequential
from keras.layers import Dense

# Define the model
ann = Sequential()
ann.add(Dense(50, input_dim=2, activation='relu'))
ann.add(Dense(100, activation='relu'))
ann.add(Dense(50, activation='relu'))
ann.add(Dense(3, activation='softmax'))
ann.compile(loss="mean_squared_error", optimizer='adam', metrics = ['accuracy'])

ann.fit(train_features, train_labels, batch_size = 1, epochs = 500)

# making predictions
predictions = ann.predict(test_features)
score = ann.evaluate(test_labels, predictions, batch_size=128)

Вот как выглядят данные:

train_features:
[[0.7545026  0.79279279]
 [0.46078708 0.05405405]
 [0.41855151 0.38738739]
 [0.74803041 0.28828829]
 [1.         0.        ]
 [0.03371062 0.51351351]
 [0.63705531 0.6036036 ]
 [0.55073228 1.        ]
 [0.18877317 0.12612613]
 [0.0903093  0.51351351]
 [0.         0.9009009 ]
 [0.64266119 0.95495495]
 [0.23438608 0.12612613]
 [0.13543883 0.24324324]]

test_features:
[[0.28072092 0.00900901]
 [0.17869765 0.66666667]
 [0.8620313  0.1981982 ]
 [0.34786594 0.03603604]]

train_labels
[[1.         0.5        1.        ]
 [0.         0.5        0.66666667]
 [0.         0.         1.        ]
 [1.         1.         0.66666667]
 [1.         1.         1.        ]
 [1.         0.         0.        ]
 [0.         1.         0.66666667]
 [1.         0.5        0.66666667]
 [1.         0.         1.        ]
 [0.         0.5        0.        ]
 [0.         0.         0.        ]
 [0.         0.5        1.        ]
 [1.         1.         0.        ]
 [1.         0.5        0.        ]]

test_labels
[[0.         0.         0.66666667]
 [0.         1.         0.        ]
 [0.         1.         1.        ]
 [1.         0.         0.66666667]]

predictions
[[0.07219139 0.9239723  0.00383623]
 [0.11950634 0.53162473 0.3488689 ]
 [0.5265181  0.35849473 0.1149871 ]
 [0.01260971 0.9338486  0.05354166]]

1 Ответ

1 голос
/ 17 марта 2019

Предлагаю вам ознакомиться с документацией метода evaluate.

ann.evaluate(test_features, test_labels)

Это путь.

Он будет напрямую использовать модель для прогнозирования, поэтому запрашивает ввод shape (2,), который соответствует форме вашего ввода.

Чтобы все прояснить, проблема не в количестве примеров в обучении / тестировании, они могут быть разными, проблема в размерности примеров. Ваша модель требует двухмерных входных данных, и первым аргументом метода оценки должен быть массив тестовых данных, а не истинные метки или прогнозируемые выходные данные для этих тестовых данных.

...