Созданный файл .npy, который должен содержать набор данных размером 200 МБ, практически пуст - PullRequest
0 голосов
/ 01 июля 2018

Я следую этому учебнику , и главная цель - сбалансировать данные и сохранить их во втором листе данных обучения (первый содержит несбалансированные данные). Это код:

import numpy as np
import pandas as pd
from collections import Counter
from random import shuffle

train_data = np.load('training_data.npy')

df = pd.DataFrame(train_data)
print(df.head())
print(Counter(df[1].apply(str)))

lefts = []
rights = []
forwards = []

shuffle(train_data)

for data in train_data:
    img = data[0]
    choice = data[1]

    if choice == [1,0,0]:
        lefts.append([img,choice])
    elif choice == [0,1,0]:
        forwards.append([img,choice])
    elif choice == [0,0,1]:
        rights.append([img,choice])
    else:
        print('no matches')


forwards = forwards[:len(lefts)][:len(rights)]
lefts = lefts[:len(forwards)]
rights = rights[:len(forwards)]

final_data = forwards + lefts + rights
shuffle(final_data)

np.save('training_data_v2.npy', final_data)

Я действительно не понимаю, почему он создает файл размером 120B, в то время как набор данных весит 200MB ..

1 Ответ

0 голосов
/ 01 июля 2018

Итак, главная проблема в этих трех строках

forwards = forwards[:len(lefts)][:len(rights)]
lefts = lefts[:len(forwards)]
rights = rights[:len(forwards)]

вы усекаете массивы.

Итак, чтобы подтвердить окончательные формы массивов, сделайте -

print(len(forwards),len(lefts),len(rights))
// those 3 lines
print(len(forwards),len(lefts),len(rights))

Вы увидите разницу.

Также попробуйте запустить код без этих трех строк, массивы будут 200 МБ:)

P.S. Я бы посоветовал вам сделать усечение вручную -

forwards = forwards[:my_number]

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...