#python-3.x #numpy #dataset #tensorflow2.0
#python-3.x #numpy #набор данных #tensorflow2.0
Вопрос:
try:
with open(f'F:/Storage/readyDataset{IMG_SIZE}.pkl', 'rb') as save:
training_data = pickle.load(save)
print("Using dataset")
except:
for category in CATEGORIES:
path = os.path.join(DATADIR, category)
class_num = CATEGORIES.index(category)
print("Gathering Dataset: {}%".format(class_num*50))
for img in os.listdir(path):
img_array = cv2.imread(os.path.join(path,img))
new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
training_data.append([new_array, class_num])
print("Gathering Dataset: 100%nSaving dataset")
with open(f'F:/Storage/readyDataset{IMG_SIZE}.pkl', 'wb') as save:
pickle.dump(training_data, save, protocol=4)
print("Compiling Data")
random.shuffle(training_data)
for features, label in training_data:
X.append(features)
Y.append(label)
X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3) / 255
Y = np.array(Y)
print("Finished Compiling Data")
Ошибка памяти: невозможно выделить 39,8 гигабайт для массива с формой (6800, 512, 512, 3) и типом данных float64
В настоящее время я пытаюсь использовать пользовательский набор данных из 6800 изображений в TensorFlow v2. Размер набора данных составляет менее 3 ГБ, но после компиляции данных он указывает, что его 40 ГБ. Как это возможно? Я чувствую, что делаю это неправильно.
Комментарии:
1. Дайте форму массива, это ожидаемый диапазон размеров,
(6800* 512* 512* 3 *8)/1e9
. Как вы измеряете размер набора данных?2. Возможно, вы забыли умножить на размер числа с плавающей точкой? Или 3 канала?
3. @hpaulj Его 512 пикселей на 512 пикселей, а 3 — RGB, я не уверен, зачем вам добавлять 8? также, что делает /1e9 ?
4. @MadPhysicist Я не уверен, что вы имеете в виду, умножая размер числа с плавающей запятой, 3 должно представлять RGB правильно?
5. @Poofy38. Ваши данные загружаются в массив с типом данных
np.float64
в соответствии с сообщением об ошибке.float64
это 64-разрядное или 8-байтовое число. Это то, о чем я говорю, и именно отсюда происходит коэффициент hpaulj, равный 8.
Ответ №1:
Вы можете использовать tf.data.Dataset
для создания своего набора данных для оптимизации потребления памяти.
Для входных конвейеров TensorFlow с данными другого типа вы можете следовать этой официальной документации .