Преобразование модели tflearn в керасы - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь преобразовать мою старую модель tflearn в модель keras, поскольку я перешел с TF 1.15 на TF 2.0, где tflearn больше не поддерживается. Моя модель keras:

model = tf.keras.Sequential([
    tf.keras.layers.Dense(8, input_shape=(None, len(train_x[0]))),
    tf.keras.layers.Dense(8),
    tf.keras.layers.Dense(len(train_y[0]), activation="softmax"),
])

model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size)

test_loss, test_acc = model.evaluate(train_x, train_y)
print("Tested Acc:", test_acc)

Когда я ее запускаю, я получаю следующую ошибку:

ValueError: Ошибка при проверке ввода: ожидается, что плотность_произведения имеет 3 измерения, но получена массив с формой (49, 51)

Я понятия не имею, как исправить эту ошибку. Нужно ли как-то изменить размер модели? Что я делаю не так?

Для справки, моя старая модель tflearn была:

tf.reset_default_graph()

net = tflearn.input_data(shape=[None, len(train_x[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax')
net = tflearn.regression(net)

model = tflearn.DNN(net, tensorboard_dir='tflearn_logs')
model.fit(train_x, train_y, n_epoch=epochs, batch_size=batch_size, show_metric=True)

1 Ответ

0 голосов
/ 19 января 2020

Как мы выяснили в комментариях, у вашего кода есть две проблемы.

Во-первых, вы не должны указывать размер пакета в параметре input_shape, ср. документация Keras для Dense.

Во-вторых, поскольку train_y.shape = (?, 6), вам нужно использовать categorical_crossentropy, а не sparse_categorical_crossentropy. В документации Keras имеется примечание , в котором подробно описывается различие.

Вот исправленный код:

model = tf.keras.Sequential([
    tf.keras.layers.Dense(8, input_shape=(len(train_x[0]))),
    tf.keras.layers.Dense(8),
    tf.keras.layers.Dense(len(train_y[0]), activation="softmax"),
])

model.compile(optimizer="adam", loss="categorical_crossentropy", metrics="accuracy"])
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...