Python 神经网络的数据集太大,因此会使我的操作系统崩溃。我如何使它更有效率?

Python 神经网络的数据集太大,因此会使我的操作系统崩溃。我如何使它更有效率?,python,optimization,dataset,neural-network,Python,Optimization,Dataset,Neural Network,我正在制作一个简单的神经网络,它将通过预测在输入2张牌时是提升还是折叠来玩扑克。我正在用10461x6的数据集训练它 以下是前几行的内容: ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓ ┃ Card1/12 ┇ Card2/12 ┇Suited?┇ Average ┇Max Difference┇Min Difference┃ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━

我正在制作一个简单的神经网络,它将通过预测在输入2张牌时是提升还是折叠来玩扑克。我正在用10461x6的数据集训练它

以下是前几行的内容:

┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃  Card1/12 ┇  Card2/12 ┇Suited?┇  Average  ┇Max Difference┇Min Difference┃
┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━┫
┃0.642857143┇0.285714286┇   0   ┇0.464285714┇ 0.178571429  ┇ 0.178571429  ┃
┣┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
┃0.357142857┇0.214285714┇   0   ┇0.285714286┇ 0.071428571  ┇ 0.071428571  ┃
┣┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
┃0.857142857┇0.285714286┇   0   ┇0.571428571┇ 0.285714286  ┇ 0.285714286  ┃
┣┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅╋┅┅┅┅┅┅┅┅┅┅┅┅┅┅┫
┃0.928571429┇0.571428571┇   0   ┇   0.75    ┇ 0.178571429  ┇ 0.178571429  ┃
┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━┛
我将此数据集存储在csv中,并使用
np.genfromtxt()
将其转换为python中的数组。然后,这些数据通过神经网络进行训练。然而,我遇到了一个小问题,因为数据集太大了,以至于我的操作系统完全崩溃

以下是我认为正在发生的事情:

  • 我不认为阵列无法容纳10461x6阵列有问题
  • 我相当肯定的是,培训花费的时间太长,并且使用了所有的系统资源,所以看起来它已经挂起了
我需要一种更有效的方法来用这个大数据集训练我的神经网络

这是我的密码:

import numpy as np
import csv
class nn:   
    #make sigma
    def sigma(self,x):
        return 1/(1+np.exp(-x))

    #sigma gradient
    def sigmaDeriv(self,x):
        return x*(1-x)

    def train(self):
        #define datasets
        x = np.genfromtxt('hands.csv', delimiter=',')
        y = np.genfromtxt('correctpred.csv', delimiter=',')[np.newaxis]
        y = y.T

        #seed
        np.random.seed(1)

        w0 = 2*np.random.random((6,10461))-1
        w1 = 2*np.random.random((10461,10461))-1
        w2 = 2*np.random.random((10461,10461))-1
        w3 = 2*np.random.random((10461,1))-1

        #train
        for t in xrange(1000):
            #forward propagation
            l0 = x
            l1 = self.sigma(np.dot(l0, w0))
            l2 = self.sigma(np.dot(l1, w1))
            l3 = self.sigma(np.dot(l2, w2))
            l4 = self.sigma(np.dot(l3, w3))

            #error + change calc
            l4_error = y - l4    
            l4_change = l4_error*self.sigmaDeriv(l4)
            l3_error = l4_change.dot(w3.T)
            l3_change = l3_error * self.sigmaDeriv(l3)
            l2_error = l3_change.dot(w2.T)
            l2_change = l2_error * self.sigmaDeriv(l2)
            l1_error= l2_change.dot(w1.T)
            l1_change = l1_error * self.sigmaDeriv(l1)

            #update weights
            w3 += np.dot(l3.T, l4_change)
            w2 += np.dot(l2.T, l3_change)
            w1 += np.dot(l1.T, l2_change)
            w0 += np.dot(l0.T, l1_change)

        print "Output after training"
        print l4

    nn().train()
使用时,它正是为了这种目的而创建的


基本上,不使用所有数据向前向后传播并计算误差(损失),只使用一批b样本来计算损失并获得梯度。然后训练10461/b次迭代,每次使用不同的一批样本,直到看到整个数据集。一旦你在整个数据集中进行了训练,那就叫做历元。重复大约10个时代(可由您调整)。

FYI找到了本教程,这是正确的吗?@Snowsnooks否,这似乎是标准梯度下降,而不是随机梯度下降。Valenegro您有随机GD的示例或教程吗?