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。这可能是训练阶段的问题吗?

4

1 回答 1

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,请相应地调整这些参数。

于 2017-01-01T11:03:57.333 回答