我正在尝试使用Tensorflow识别UCI数据集中的手写数字(https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)。数据集中每行是一个8*8像素矩阵的扁平化表示,最后一个属性是类别代码0-9。然而,我之前学习的教程是关于MNIST数据的,这与之大不相同。MNIST数据是一个28*28的矩阵,值范围是0-255。所以,代码是这样的:
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("/tmp/data", one_hot=True)x = tf.placeholder('float', [None, 784])y = tf.placeholder('float')
由于我对Tensorflow还比较陌生,我无法为UCI数据准备神经网络模型。我现在有两个主要的问题需要指导。
- 导入数据的方法是否正确?
- 如何将最后一个属性作为’y’标签?
目前我在考虑这样做:
filename_queue = tf.train.string_input_producer(["optdigits.tra"])reader = tf.TextLineReader()_, serialized_example = reader.read(filename_queue)image,label = decode(serialized_example)x = tf.placeholder('float', [None, 64])y = tf.placeholder('float')
基本上,我希望准备一个具有64个节点的输入层,并使用’y’标签作为输出,以便训练NN模型
。
回答:
我也是新手,可能这不是一个好的方法。我使用numpy导入了数据,然后将其转换为tensorflow格式。
import tensorflow as tfimport numpy as nptrainingDataSet_ = np.loadtxt('/data/optdigits.tra', delimiter=',');trainingDataSet = tf.convert_to_tensor(trainingDataSet_, np.int32)# 存储每个样本的标签y = trainingDataSet[:, 64]# 从特征中移除标签x = trainingDataSet[:, :64]