我正在从头开始编写一个简单的神经网络。神经网络以方法simple_1_layer_classification_NN
实现。从for loop
(在下面的代码中)可以看到,对于每个纪元(神经网络的训练运行),我都将成本(误差容限)值附加到数组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()
答案 0 :(得分:2)
那
x = xdata[::10]
x = ydata[::10]
plt.plot(x, y)
plt.show()
它将在xdata,ydata中绘制出每10个点
以您的情况
x = None
y = None
l = len(xdata)
if l < 100:
x = xdata[::]
y = ydata[::]
elif l < 200:
x = xdata[::2]
y = ydata[::2]
elif l < 500:
x = xdata[::5]
y = ydata[::5]
更新
不确定是否相关,但是您也可以尝试使用自定义步幅。它将指向相同的数据缓冲区,但是使用不同的元数据来逐步处理数据。
要查看的函数是https://docs.scipy.org/doc/numpy/reference/generated/numpy.lib.stride_tricks.as_strided.html#numpy.lib.stride_tricks.as_strided,它在stride_tricks中是有原因的-您会花一些时间来习惯它。将writeable设置为False,这样就不会破坏原始数据。简单的例子是here。