2017-01-01 79 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'软件包,但是当你的问题是分类时,你如何使用'regression'? – 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

相关问题