2015-05-29 133 views
2

我想建立一個類似於theano logistic_sgd.py實現中提供的mnist.pkl.gz的數據集。以下是我的代碼片段。Python Numpy錯誤:ValueError:設置一個序列的數組元素

import numpy as np 
import csv 
from PIL import Image 
import gzip, cPickle 
import theano 
from theano import tensor as T 

def load_dir_data(csv_file=""): 
    print(" reading: %s" %csv_file) 
    dataset=[] 
    labels=[] 

    cr=csv.reader(open(csv_file,"rb")) 
    for row in cr: 
     print row[0], row[1] 
     try: 
      image=Image.open(row[0]+'.jpg').convert('LA') 
      pixels=[f[0] for f in list(image.getdata())] 
      dataset.append(pixels) 
      labels.append(row[1]) 
      del image 
     except: 
      print("image not found") 
    ret_val=np.array(dataset,dtype=theano.config.floatX) 
    return ret_val,np.array(labels).astype(float) 


def generate_pkl_file(csv_file=""): 
    Data, y =load_dir_data(csv_file) 
    train_set_x = Data[:1500] 
    val_set_x = Data[1501:1750] 
    test_set_x = Data[1751:1900] 
    train_set_y = y[:1500] 
    val_set_y = y[1501:1750] 
    test_set_y = y[1751:1900] 
    # Divided dataset into 3 parts. I had 2000 images. 

    train_set = train_set_x, train_set_y 
    val_set = val_set_x, val_set_y 
    test_set = test_set_x, val_set_y 

    dataset = [train_set, val_set, test_set] 

    f = gzip.open('file.pkl.gz','wb') 
    cPickle.dump(dataset, f, protocol=2) 
    f.close()  


if __name__=='__main__': 
    generate_pkl_file("trainLabels.csv") 

錯誤消息: 回溯(最近通話最後一個):

File "convert_dataset_pkl_file.py", line 50, in <module> 
    generate_pkl_file("trainLabels.csv") 
    File "convert_dataset_pkl_file.py", line 29, in generate_pkl_file 
    Data, y =load_dir_data(csv_file) 
    File "convert_dataset_pkl_file.py", line 24, in load_dir_data 
    ret_val=np.array(dataset,dtype=theano.config.floatX) 
ValueError: setting an array element with a sequence. 

CSV文件包含兩個字段..映像名稱,分類標籤 當在Python解釋器運行這個,它似乎在爲我工作..如下..我沒有得到錯誤說在這裏設置一個序列的數組元素..

--------- python inte rpreter輸出----------

image=Image.open('sample.jpg').convert('LA') 
pixels=[f[0] for f in list(image.getdata())] 
dataset=[] 
dataset.append(pixels) 
dataset.append(pixels) 
dataset.append(pixels) 
dataset.append(pixels) 
dataset.append(pixels) 
b=numpy.array(dataset,dtype=theano.config.floatX) 
b 
array([[ 2., 0., 0., ..., 0., 0., 0.], 
     [ 2., 0., 0., ..., 0., 0., 0.], 
     [ 2., 0., 0., ..., 0., 0., 0.], 
     [ 2., 0., 0., ..., 0., 0., 0.], 
     [ 2., 0., 0., ..., 0., 0., 0.]]) 

即使我運行相同的一組指令(邏輯上)的,當我運行sample.py,我得到ValueError異常:設置一個數組元素用序列..我試圖理解這種行爲..任何幫助將是偉大的..

+1

請始終在您的問題中包含完整的錯誤追溯。 – cel

+0

不要只是告訴我們錯誤。告訴我們它發生的地方。 – hpaulj

+0

做了編輯..我用gdb試過了。但是沒有堆棧 – ssh99

回答

3

該問題可能類似於this question

您正在嘗試爲每個圖像創建一行像素值矩陣。但是每個圖像都有不同的大小,因此每行中的像素數量是不同的。

你不能在numpy中創建一個「參差不齊的」浮點類型數組 - 每行必須具有相同的長度。

您需要將每行填充到最大圖像的長度。

+0

P.S.如果你剛剛搜索'numpy'設置序列爲''的數組元素,谷歌的第一個結果(我看到)是我鏈接到的StackOverflow問題。 –

+0

沒有..所有圖像的大小相同..它在python解釋器中爲我工作..當我將它作爲文件運行時.. – ssh99

+0

您的Python解釋器示例顯示多次添加相同的圖像,沒有多少不同的圖像。 –

相關問題