【发布时间】:2021-03-14 17:36:46
【问题描述】:
当我不使用 shuffle(train_data) 时,这个问题似乎消失了。我也试过分别做 shuffle(train_data_1) 和 shuffle(train_data_2) 但在这种情况下,分布似乎也发生了变化。
import numpy as np
import pandas as pd
from collections import Counter
from random import shuffle
train_data_1 = np.load('training_data_v1.npy', allow_pickle=True)
train_data_2 = np.load('training_data_v2.npy', allow_pickle=True)
train_data = np.vstack((train_data_1, train_data_2))
df = pd.DataFrame(train_data)
print(df.head())
print(Counter(df[1].apply(str)))
Output :
0 1
0 [[33, 255, 255, 255, 255, 255, 255, 255, 255, ... [0, 1, 0]
1 [[33, 255, 255, 255, 255, 255, 255, 255, 255, ... [0, 1, 0]
2 [[33, 255, 255, 255, 255, 255, 255, 255, 255, ... [0, 1, 0]
3 [[33, 255, 255, 255, 255, 255, 255, 255, 255, ... [0, 1, 0]
4 [[33, 255, 255, 255, 255, 255, 255, 255, 255, ... [0, 1, 0]
Counter({'[0, 1, 0]': 6064, '[1, 0, 0]': 542, '[0, 0, 1]': 394})
将前、左、右分离到各自的数组中
shuffle(train_data)
lefts = []
rights = []
forwards = []
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')
print (len(forwards), len(lefts), len(rights))
Output:
6086 763 151
一开始前、左、右的分布是(6064,542,394)
现在是 (6096, 763, 151)
分布发生了怎样的变化?
我做错了什么!?
【问题讨论】:
-
没有看到train_data就不清楚你在做什么。您是否 100% 确定 train_data 与创建的 df 完全相同,无论如何,也许希望从 df 而不是 train_data 构建您的前、左和右。 iterrows() 是一种类似于您尝试过的方法。
-
不,这不是问题。 random.shuffle() 似乎是问题
-
请发布 MCVE。我可以复制的东西。我不相信您对 shuffle 的评估是问题所在,但我无法用您提供的内容对其进行测试。
-
我在分成前、左、右后使用了随机播放。现在没有任何问题,数据保存在正确的分布中
标签: python arrays pandas numpy dataframe