#python #neural-network #pytorch
Вопрос:
Я тренирую простую нейронную сеть на встраивании слов. Я пытаюсь сохранять сюжет вложений каждые 1000 эпох:
if epo00 == 0:
print(f'Epoch {epo}')
#save plots
W = net.fc1.weight
W = W.detach().numpy()
svd = decomposition.TruncatedSVD(n_components=2)
W1_dec = svd.fit_transform(W.T)
x = W1_dec[:,0]
y = W1_dec[:,1]
plot = sns.scatterplot(x, y)
for i in range(0,W1_dec.shape[0]):
plot.text(x[i], y[i] 2e-2, list(vocabulary.keys())[i], horizontalalignment='center', size='small', color='black', weight='semibold')
plt.savefig(f'images/epoch{epo}.png')
Сначала обучение и сюжеты будут отличными, но через некоторое время они значительно замедлятся. Я уже сталкивался с этой проблемой раньше, когда каждый раз использовался весь вычислительный график, но я не вижу, где я мог бы сделать то же самое здесь.
Я попытался удалить часть построения (в разделе «#сохранить графики»), и все работает просто отлично и не замедляется.
Обновить
Похоже, что последняя строка-это та, которая замедляет процесс: plt.savefig(f'images/epoch{epo}.png')
Не знаю, как это исправить
Комментарии:
1. вы пробовали поместить часть сюжета в отдельную функцию? Из ваших примеров трудно понять, каковы размеры. Может быть, размеры растут, и с течением времени можно сэкономить гораздо больше.
2. У меня нет. Однако размеры остаются прежними. Они (100,2) — 100 баллов,
x,y
по каждому3. Еще одна вещь, о которой я не знаю, пробовали ли вы. Вы пробовали сохранить один-единственный объект сюжета и очистить его, прежде чем создавать новый?
4. Я не видел, но на самом деле я просто видел это где-то в другом месте. Пытаюсь понять, как это сделать. Есть какие-нибудь предложения о том, как это сделать?