我已经了解了一些关于Caffe框架(用于定义和训练深度学习模型)
作为我的第一个程序,我想编写一个程序,用于使用fer2013数据集3}}培训和测试“面部情感识别”任务
我下载的数据集采用“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)
但它不起作用,我收到了这个错误:
“无法打开/创建文件'PrivateTest.csv”
我搜索了很多,我发现了link,但我仍然无法理解它是如何从CSV文件中读取的。
我还没有安装Matlab。
如果有人能帮助我,我会很高兴。如果有任何关于为Kaggle网站或任何其他数据集上的数据集编写caffe模型的建议(那些不在caffe网站上的人)
答案 0 :(得分: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”])。
请注意,此函数适用于每个图像具有多个标签的数据集(使用hdf5而不是csv文件的一个正当理由),但每个图像可能只需要一个标签。
答案 1 :(得分:-1)
有点晚了,但是想指出如果csv文件太大而无法加载到内存中,你可以使用pandas“chunksize”拆分文件并逐个加载块到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
适用于表格格式。