2017-06-05 83 views
2

我正在编写一个Python程序来识别图像上的字符。我已经选择了一种识别方法,这不是我遇到的问题。这是困扰我的数据集访问。我们得到一个训练数据集(pickle文件),其中包含以单个矩阵形式存储的图像(NxD)。每行是一个60x60的图像。我们应该实现一个函数,对于矩阵X将为我们提供预测类标签(标签为{0 ... 35} - 在图像上识别的字符/数字)的矢量yPython图像识别 - 访问数据集

现在,我已阅读了主题和所有内容,我正在使用HOG进行特征提取,以及get_features函数。我不明白,我应该如何分配x_trainx_val,以及y_trainy_val,只有我的.pkl文件中有。我决定尝试将数据集随机分为x_trainx_val,分别为50-50。我得到的y向量填充,所以我应该分裂它以得到y_val以及?到目前为止,我有我的最后一个函数代码(+首先我加载数​​据):

def load_data(): 
    PICKLE_FILE_PATH = 'train.pkl' 
    with open(PICKLE_FILE_PATH, 'rb') as f: 
     return pkl.load(f) 

def final(): 
    """ 
    :param x: matrix NxD 
    :return: vector Nx1 
    """ 
    train = load_data() 
    x = get_features(train['x']) 
    N, D = x.shape 
    y = np.zeros((N, 1)) 
    np.random.shuffle(x) 
    x_train = x[:50] 
    x_val = x[50:] 
    # calling functions i'm using for recognition.... 
    return y 

现在,我得到一个错误,指出:

x = get_features(train['x']) 
TypeError: tuple indices must be integers or slices, not str 

分析它永远之后,我假设在.pkl中,(NxD)矩阵每行有一个元素,因为它应该每行包含一个图像。也许我看到它错了?也许在.pkl中没有'x'呢,只是一个无名矩阵?我迷路了,我只想了解如何将.pkl文件中给出的那一点数据转换为我熟悉的变量x_train, x_val, y_train, y_val,我都需要这些变量来识别。任何提示都会很棒!

回答

0

如果你想有一个元组的第elemnt你必须做到:

x = get_features(train[0]) 
+0

所以这将是第一个形象,对不对?如果我想为所有这些做这个,我想id需要一个循环...但是它是必要的,是不是有另一种方法来做到这一点?我试过[:]但我想我应该提一下那个(?)专栏... – Swaglina