2016-08-07 9 views
2
にCSVファイルを変換

私は私の最初のプログラムとしてはカフェ:HDF5

を(定義し、深い学習モデルを訓練に使用される)Caffeのフレームワークについて少し学んだ、私は訓練のためのプログラムを書きたいと "テストfer2013データセットを使用した「顔の感情認識」タスク

ダウンロードしたデータセットは「CSV」形式です。私が知っているように、Caffeで作業するには、データセット形式が "lmdb"または "hdf5"でなければなりません。

私は最初にデータセットをhdf5またはlmbd形式に変換する必要があるようです。ここで

は、私が最初に試した簡単なコードです:

import pandas as pd 
import numpy as np 
import csv 

csvFile = pd.HDFStore('PrivateTest.csv') 
PrivateTestHDF5 = csvFile.to_hdf(csvFile) 

print len(PrivateTestHDF5) 

しかし、それは動作しません、と私はこのエラーを取得する:私はたくさん検索しました

、私はこのlinkを見つけましたCSVファイルからの読み込み方法はまだ分かりません。

また、私はMatlabをインストールしていません。

誰かが私を助けることができれば嬉しいです。また、Kaggleのウェブサイトやその他のデータセット(ウェブサイトに掲載されていない人)のCaffeモデルの作成に関するアドバイスがある場合

+2

あなたの質問に具体的にする必要がありますhttp://stackoverflow.com/help/how-to-askを読んでください。特に、これはCaffeやmatlabとは関係がありません(ただし、あなたの懸念される問題の構成要素かもしれませんが、問題に直接関係しません)。 'pd.HDFStore'のドキュメンテーションを見てみましょう – mgilbert

+0

@mgilbertここでCaffeについて話すことは役に立たないことは分かりませんでした。私の質問を編集する方が良いと思いますか? (カフェタグを取り除く?) – kadaj13

+0

はい問題を1つ特定の問題に限定します。 csvからの読み込み、またはhdf5ファイルへの書き込み。私は両方の良い概観を与えるhttp://pandas.pydata.org/pandas-docs/version/0.18.1/tutorials.htmlを見てみよう – mgilbert

答えて

3

入力データはlmdbまたはhdf5にある必要はありません。 csvファイルからデータを入力できます。あなたがしなければならないのは、この一つとして、ImageDataを入力層を使用することです。ここでは

layer { 


name: "data" 
    type: "ImageData" 
    top: "data" 
    top: "label" 
    include { 
    phase: TRAIN 
    } 
    transform_param { 
    mirror: false 
    crop_size: 224 
    mean_file: "./supporting_files/mean.binaryproto" 
    } 
    image_data_param { 
    source: "./supporting_files/labels_train.txt" 
    batch_size: 64 
    shuffle: true 
    new_height: 339 
    new_width: 339 
    } 
} 

、ファイル「./supporting_files/labels_train.txtは、」入力画像へのパスが含まれているだけでcsvファイルであります通常のイメージとしてファイルシステムに保存されます。

これは、通常、モデルにデータを提供する最も簡単な方法です。しかし、あなたが本当にファイルをHDF5を使用する必要がある場合は、この機能のようなものを使用することができます

import h5py 
import sys 
import numpy as np 



def create_h5_file(labels,file_name): 
     nr_entries = len(labels) 
     images = np.zeros((nr_entries, 3, width, height), dtype='f4') 
     image_labels = np.zeros((nr_entries, nr_labels_per_image), dtype='f4') 
     for i, l in enumerate(labels): 

      img = caffe.io.load_image(l[0]) 

      # pre process and/or augment your data 

      images[i] = img 

      image_labels[i] = [int(x) for x in l[1]] 

     with h5py.File(file_name, "w") as H: 
      H.create_dataset("data", data=images) 
      H.create_dataset("label", data=image_labels) 
file_nameはHDF5出力ファイルのパスの文字列です

とラベルをしているとラベルは、そのような(ようタプルの配列です"/path/to/my/image",[label1",label2",...,"labeln"])。

この関数は、イメージごとに複数のラベルを持つデータセット(csvファイルの代わりにhdf5を使用する正当な理由の1つ)に使用できますが、イメージごとに1つのラベルしか必要でないことに注意してください。

少し遅れ
+0

ありがとうございます。別の問題が発生しました。 "create_imagenet_mean.sh"ファイルには、$ TOOLS/compute_image_mean $ EXAMPLE/ilsvrc12_train_lmdb \という行があります。このスクリプトを使用するには、私のデータのlmdb版が必要なようです。私は正しい? – kadaj13

+0

また別の質問です。このコードはそのデータセットで機能しますか?そのデータセットではラベルと画像が同じファイルにあり、このコードを変更する方法がないからです。もしあなたが私を助けてくれれば幸いです。ありがとう:) @Mppl – kadaj13

-1

が、csvファイルは、ファイルを分割し、HDF5にチャンクを一つずつをロードするためにパンダ「チャンク」を使用することができ、メモリにロードするには大きすぎる場合ことを指摘したかった:

import pandas as pd 

csvfile = 'yourCSVfile.csv' 
hdf5File = 'yourh5File.h5' 

tp = pd.read_csv('CSVfile', chunksize=100000) 

for chunk in tp: 
    chunk.to_hdf(hdf5File, key = 'data', mode ='a', format='table', append = True) 

append = Trueは表形式用です。