我正在遵循CNTK中的this教程,该教程适用于我自己的数据。
我有一个数据集,每个观察点包含2张图像,并且我将火车标签存储在csv中,如下所示:
id,appliance
1000,8
1001,1
1002,8
1003,1
我每次观察得到的2张图像的标签都相同。如果我只使用2种图像类型中的一种并将它们存储在数组中,我将得到形状为(988,128,118)的数组,并且转换为array的标签csv的sahpe为(988,2),即可以将每个标签映射到图像。
问题是,现在我决定拍摄自己拥有的所有图像(每个观测值2个,而不是一个)现在我有一个图像数组(1976、128、118),但是我的标签数组仍然是( 988,2)由于标签的长度,标签分配将无法进行。我该如何克服这个问题?
要进行标签分配,我在这里使用此功能,该功能为每个15104个像素分配标签:
# Save the data files into a format compatible with CNTK text reader
def savetxt(filename, data, hasLabels=True, labels=0):
dir = os.path.dirname(filename)
if not os.path.exists(dir):
os.makedirs(dir)
print("Saving", filename )
with open(filename, 'w') as f:
print("opened....")
labels_ohe = list(map(' '.join, np.eye(11, dtype=np.uint).astype(str))) #for one hot encoding
index = 0
for row in data:
row_str = row.astype(str)
if hasLabels:
label_str = labels_ohe[int(labels[index])]
feature_str = ' '.join(row_str)
if hasLabels:
f.write('|labels {} |features {}\n'.format(label_str, feature_str))
else:
f.write('|features {}\n'.format(feature_str))
index = index + 1
我们非常感谢您的帮助。预先感谢。
答案 0 :(得分:1)
cntk中的地图文件定义为:
file_path_to_image, class_label
D:/image1.jpg, 1
D:/image2.jpg, 2
D:/image3.jpg, 1
D:/image4,jpg, 0
您可以为整个数据集构建地图文件,无论您有多少观测值。
或者,如果原始图像阵列和标签阵列已在第一轴(批处理轴)上对应。然后将它们堆叠在其自身上将使对应关系保持在第一轴上。