我已经查看了此网站上关于创建图像数据的 pickle 数据文件的两个问题(类似于 mnist.pkl.gz)。尽管我知道不需要进行 pickle ,但我希望有人帮助找出为什么在输入以下代码执行相同操作后我的数据没有被 pickle 。
- 现在我使用 50 个 .bmp 图像(名称为 image1.bmp、image2.bmp 等)来测试 .pkl.gz 文件是否已形成。
- 我想将它们分为训练集、验证集和测试集。
- 这些图像与下面的代码位于同一目录中
- 文件 trainLabels.csv 是一个单列 csv 文件,其列名称为“Class”,包含 50 个图像的 50 个标签。像这样:
类别
0
1
2
0
0
1
.
。等等。
这里的问题是,只有 csv 文件(图像标签)被 pickle ,而不是图像数据。
这些图像与下面的代码位于同一目录中。
from PIL import Image
from numpy import genfromtxt
import gzip, cPickle
import pickle
from glob import glob
import numpy as np
import pandas as pd
def dir_to_dataset(glob_files, loc_train_labels=""):
print("Gonna process:\n\t %s"%glob_files)
dataset = []
for file_count, file_name in enumerate( sorted(glob(glob_files),key=len) ):
print file_name
print 'Are we in the loop ?'
image = Image.open(file_name)
img = Image.open(file_name).convert('LA') #tograyscale
pixels = [f[0] for f in list(img.getdata())]
dataset.append(pixels)
if file_count % 10== 0:
print("\t %s files processed"%file_count)
# outfile = glob_files+"out"
# np.save(outfile, dataset)
if len(loc_train_labels) > 0:
df = pd.read_csv(loc_train_labels)
return np.array(dataset), np.array(df["Class"])
else:
return np.array(dataset)
Dataa, y = dir_to_dataset("image\\*.bmp","trainLabels.csv")
# Data and labels are read
train_set_x = Dataa[:30]
val_set_x = Dataa[31:40]
test_set_x = Dataa[41:50]
train_set_y = y[:30]
val_set_y = y[31:40]
test_set_y = y[41:50]
# Divided dataset into 3 parts. I had 6281 images.
train_set = train_set_x, train_set_y
print 'Type of train_set_x',type(train_set_x)
print train_set_x
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('traffic_file.pkl.gz','wb')
pickle.dump(dataset, f, protocol=2)
f.close()
最佳答案
将正则表达式更改为 *.bmp 即可正常工作。
关于python - 创建图像数据的pickeled数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488993/