I am going to perform pixel-based classification on an image. Here is the code I used for training the 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)
The problem is that after training the model, the result of p.array(model.predict(x_test)) is 1 only although I expected this to be either 2 or 3. In one example where I have had 4 classes of objects and I expected the result of that command to be a label between 2 and 5 (note:y_train has int values between 2 and 5) but again the output of the prediction function is 1. Could that be a problem of training phase?
The
None
parameter is used to denote different training examples. In your case, each image has a total of28*28*4
parameters, due to the custom four channel dataset you are using.To make this LSTM work, you should try to do the following -
Of course, (this is very important), make sure that
reshape()
puts the four different channels corresponding to a single pixel in the last dimension of the numpy array, and the28, 28
correspond to pixels in a single image.In case your images don't have dimension
28*28
, adjust those parameters accordingly.