2017-01-01 2 views
0

Я собираюсь выполнить на основе пиксельной классификации. Вот код, который я использовал для обучения NNНеверный вывод функции предсказания в тензорном потоке

net = input_data(shape=[None, 1,4]) 
net = tflearn.lstm(net, 128, return_seq=True) 
net = tflearn.lstm(net, 128) 
net = tflearn.fully_connected(net, 1, activation='softmax') 
net = tflearn.regression(net, optimizer='adam', 
         loss='categorical_crossentropy') 
model = tflearn.DNN(net, tensorboard_verbose=2, checkpoint_path='model.tfl.ckpt') 
X_train = np.expand_dims(X_train, axis=1) 
model.fit(X_train, y_train, n_epoch=1, validation_set=0.1, show_metric=True,snapshot_step=100) 

Проблема заключается в том, что после обучения модели, результат p.array (model.predict (x_test)) является 1 только, хотя я ожидал, что это будет либо 2 или 3. В одном примере, когда у меня было 4 класса объектов, и я ожидал, что результат этой команды будет меткой между 2 и 5 (обратите внимание: y_train имеет значения int от 2 до 5), но опять же результат предсказания функция 1. Это может быть проблема фазы обучения?

+0

Вам определенно нужно увеличить 'n_epoch'. Я не использовал пакет 'tf_learn', но как вы можете использовать« регрессию », когда ваша проблема классифицируется? – martianwars

+0

Я новичок и просто хочу провести несколько тестов и просто скопировать этот код с веб-страницы TFlearn по адресу https://github.com/tflearn/tflearn/blob/master/examples/images/rnn_pixels.py – user2148425

+0

Попробуйте увеличить 'n_epoch' до 5 или 10 и посмотреть, помогает ли это? Вы постоянно получаете «1» по всем тестовым данным? – martianwars

ответ

0

Параметр None используется для обозначения разных примеров обучения. В вашем случае каждое изображение имеет в общей сложности 28*28*4 параметров из-за пользовательского четырехканального набора данных, который вы используете.

Чтобы сделать эту LSTM работу, вы должны попытаться сделать следующее -

X = np.reshape(X, (-1, 28, 28, 4)) 
testX = np.reshape(testX, (-1, 28, 28, 4)) 

net = tflearn.input_data(shape=[None, 28, 28, 4]) 

Конечно, (это очень важно), убедитесь, что reshape() ставит четыре различные каналы, соответствующие одной пиксель в последнем измерении массива numpy, а 28, 28 соответствуют пикселям в одном изображении.


В случае, если ваши изображения не имеют размерность 28*28, настроить эти параметры соответственно.

+0

Не уверен. Я следовал примеру здесь https://github.com/tflearn/tflearn/blob/master/tutorials/intro/quickstart.md. В моем случае мне нужно изменить 6 на 4, поскольку у меня есть 4 функции для каждого пикселя. Но опять же результат предсказания - 1 все время, хотя я ожидаю, что 1 и 2. 1 метка соответствует зеленым пикселам и от 2 до коричневых пикселей. – user2148425

Смежные вопросы