我正在从头开始编写一个简单的神经网络。神经网络在方法echo -e "Subject: Test Mail\r\n\r\nThis is my first test email." |msmtp --debug --from=default -t vikrantgoutam16@gmail.com
中实现,该方法接受输入矩阵,输出标签以及其他参数。在遍历每个纪元之前,我只想按行(即观察值)对输入矩阵进行混洗,这是避免过度拟合的一种措施。我尝试了def simple_1_layer_classification_NN
。发生了两件事。我在混洗步骤之前和之后拍摄了矩阵的快照(通过使用下面带有断点的代码来查看矩阵前后的值,并期望将其洗牌)。因此random.shuffle(dataset_input_matrix)
应该在混洗之前给出矩阵的值,matrix_input
应该在混洗之后给出矩阵的值。
matrix_input1
当我同时打印两个值时,得到的矩阵相同,没有任何变化。
input_matrix = dataset_input_matrix
# shuffle our matrix observation samples, to decrease the chance of overfitting
random.shuffle(dataset_input_matrix)
input_matrix1 = dataset_input_matrix
不知道我在这里做错了什么。 第二个奇怪的事情是,当我运行神经网络(在洗牌之后)时,其准确性急剧下降。在我获得60%-95%的准确度之前(只有极少数的50%)。
在对输入矩阵进行混洗步骤之后,无论运行模型多少次,我几乎都无法获得50%以上的准确度。考虑到改组似乎没有用断点进行检查,这很奇怪。无论如何,为什么网络精度会严重下降。除非我做的改组完全错误。
有2个问题:
1-如何仅对矩阵的行进行混洗(因为我只需要对数据集的观察(行)而不是特征(列)进行随机化处理。)
2-其次,为什么在我进行混洗时,它的准确性下降太多,以至于神经网络无法获得高于50%的值。毕竟,建议您将数据重新整理作为预处理步骤,以避免过度拟合。
请参阅下面的完整代码,并对大部分代码表示歉意。
在此先感谢您的帮助。
ipdb> input_matrix
array([[3. , 1.5],
[3. , 1.5],
[2. , 1. ],
[3. , 1.5],
[3. , 1.5],
[3. , 1. ]])
ipdb> input_matrix1
array([[3. , 1.5],
[3. , 1.5],
[2. , 1. ],
[3. , 1.5],
[3. , 1.5],
[3. , 1. ]])
ipdb>