Почему мое обучение нейронной сети со временем замедляется?

#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. Я не видел, но на самом деле я просто видел это где-то в другом месте. Пытаюсь понять, как это сделать. Есть какие-нибудь предложения о том, как это сделать?