Тестовые данные по AI с softmax (1D Array to 2D Array) - PullRequest
0 голосов
/ 09 апреля 2020

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

model = Sequential()
model.add(Dense(400, input_dim=features,activation='tanh'))
model.add(Dense(150, activation='tanh'))
model.add(Dense(80, activation='tanh'))
model.add(Dense(40, activation='tanh'))
model.add(Dense(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.save_weights("testSave.hdf5")
history = model.fit(X, Y, validation_split=0.33,epochs=15)
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

Код работает и прекрасно компилируется. Вот код для попытки создать новую запись и проверить ее на обученной выше модели.

model2 = Sequential()
model2.add(Dense(400, input_dim=features, activation='tanh'))
model2.add(Dense(150, activation='tanh'))
model2.add(Dense(80, activation='tanh'))
model2.add(Dense(40, activation='tanh'))
model2.add(Dense(5, activation='softmax'))
model2.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model2.load_weights("testSave.hdf5")
newData = random.rand(features) # Creates a new array of 87 instances (amount of features I have)
reshaped_to_2d = np.reshape(newData, (-1, 2)) # Attempting to reshape to 2D array as this is what an error is telling me to do. This doesnt work
scaler = preprocessing.Normalizer().fit(reshaped_to_2d)
newDataN = scaler.transform(reshaped_to_2d)
result = model2.predict_classes((newDataN), axis=1)
for item in result:
    print("Predicted Value: ", item[0])

Модель выдает ошибку в этой строке reshaped_to_2d = np.reshape(newData, (-1, 2)), говоря, что она не может преобразовать массив из 87 экземпляров. к массиву 2. Это может быть действительно тривиальной проблемой, но я изо всех сил пытаюсь понять это и не могу найти помощь онлайн. Любая помощь велика, спасибо.

Ошибка возвращается на картинке ниже. enter image description here

Этот код я использую для создания модели, чтобы она могла тренироваться на 87 столбцах * 100000 строк.

seed = 34
random.seed(seed)
features = 87
classes = 5
n = 100000
errors = 0.4
# Truncate
redundant = int(features/4)
# Classification dataset
X, y = make_classification(n_samples=n, n_classes=classes, n_features=features, \
random_state = 1,n_informative =20, flip_y=errors, \
n_redundant=redundant)
# reshape y to 2D array, it needs to be to append
y = reshape(y, (-1, 1))
scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
rescaledX = scaler.fit_transform(X)
Xy = concatenate((rescaledX,y),axis=1)
savetxt("myCAData.csv", Xy, delimiter=",")
data = read_csv("myCAData.csv")
print(Xy[:5])
Y = np_utils.to_categorical(y)

1 Ответ

1 голос
/ 12 апреля 2020

Новая фигура, которую вы указали при использовании np.reshape (), недопустима, поскольку сгенерированные вами данные имеют длину 87, которая является нечетным числом, и когда вы хотите разделить ее на два столбца одинаковой длины что невозможно, потому что 87/2 не является целым числом. Когда вы используете np.reshape с параметром -1 в кортеже длины, длина входного вектора должна делиться на второе число.

Вы сказали, что вектор входного объекта имеет длину 87, поэтому я не получите свою точку зрения, если вы хотите разделить в 2D-вектор новые данные для ввода в вашу модель. Можете ли вы объяснить больше логики c позади, чтобы я мог помочь вам решить эту проблему измерения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...