我将对图像执行基于像素的分类。这是我用来训练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.这可能是训练阶段的问题吗? / p>
答案 0 :(得分: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数组的最后一个维度中的单个像素,并且{ {1}}对应于单个图片中的像素。
如果您的图片没有尺寸28, 28
,请相应地调整这些参数。