Я кодирую простую нейронную сеть с нуля. Нейронная сеть реализована в методе simple_1_layer_classification_NN
. Как видно из for loop
(в приведенном ниже коде), для каждой Epoch (тренировочного прогона нейронной сети) я добавляю значение cost (error margin) к массиву costs
. Дело в том, что количество тренировок может достигать тысяч или даже миллионов. Это означает, что к массиву costs
может быть добавлено очень много элементов cost
.
Поскольку я не хочу отображать тысячи или миллионы точек данных на графике, я хочу, чтобы независимо от того, сколько элементов в массиве costs
, я хочу построить только 100 точек данных. Исходя из этого, распространяется как можно более равномерно. Например. если есть 10 элементов, то вычерчивают все 10 элементов. Если есть 100 элементов, выведите все 100 элементов. Если значение превышает 100, постройте только 100 точек данных с равным интервалом. Например. с 200 сюжетом каждый второй пункт данных. С 500, построить каждый 5-й элемент. Даже если это 102 элемента, то выведите на экран только 100 точек данных с максимально возможным разнесением. Я надеюсь это имеет смысл. Возможно ли это сделать? Обратите внимание, я включаю только часть кода, которая наиболее актуальна для вопроса. Там, где есть комментарии с точками # ......
Я просто указываю, что здесь есть код, но я его не включил, так как он не имеет отношения к вопросу.
Большое спасибо заранее за любую помощь.
def simple_1_layer_classification_NN(self, dataset_input_matrix, output_data_labels, input_dimension, epochs, activation_func='sigmoid', learning_rate=0.2, cost_func='squared_error'):
# ...............
cost = float()
costs = []
# ................
# We perform the training based on the number of epochs specified
for i in range(epochs):
#....................
# Cost: the cost function to calculate the prediction error margin
cost = chosen_cost_func(pred, output_data_labels[ri])
costs.append(cost)
#.....................
plt.plot(costs)
plt.show()