Я работаю над классификацией различных видов сигналов с глубоким обучением.У меня небольшой набор данных, и получение большего количества данных (сигналов) немного дороже.Идея состоит в том, чтобы сделать увеличение данных, и я использую код ниже, чтобы сделать это.Однако, по-видимому, 12 ГБ ОЗУ недостаточно для этого (с вводом (начальный размер набора данных) 1200), и машина в конечном итоге дает сбой.
Есть ли какие-либо идеи / предложения о том, как я могу улучшить этот код более удобным для памяти способом?
def sliding_window(data, labels, window_sz, n_hop, n_start=0, show_status=False):
"""
input: (array) data : matrix to be processed
(int) window_sz : nb of samples to be used in the window
(int) n_hop : size of jump between windows
output:(array) new_data : output matrix of size (None, window_sz, feature_dim)
"""
flag = 0
for sample in range(data.shape[0]):
tmp = np.array(
[data[sample, i:i + window_sz, :] for i in np.arange(n_start, data.shape[1] - window_sz + n_hop, n_hop)])
tmp_lab = np.array([labels[sample] for i in np.arange(n_start, data.shape[1] - window_sz + n_hop, n_hop)])
if sample % 100 == 0 and show_status == True:
print("Sample " + str(sample) + "processed!\n")
if flag == 0:
new_data = tmp
new_lab = tmp_lab
flag = 1
else:
new_data = np.concatenate((new_data, tmp))
new_lab = np.concatenate((new_lab, tmp_lab))
return new_data, new_lab
, и вот как я его использую
x_augmented, y_augmented = sliding_window(data = X_train[:,:,:],
labels = y_train[:],
window_sz = 4 * fs,
n_hop = fs // 10,
n_start = fs * 1)
Спасибо большое!