Esempio n. 1
0
def dbn_train(NN,SD,opt):
    lAmt=len(NN['layer'])
    if 'maxStep' not in opt:
        opt['maxStep']=50


    ### Train the 1st hidden layer(connected by input layer).
    # Construct RBM from current layer of network.
    rbm={}
    rbm['W']=NN['layer'][2]['W']
    rbm['vB']=np.zeros(1,NN['sizes'](1))
    rbm['hB']=NN['layer'][2]['B']

    # Training of RBM.
    rbm=RBM.rbm_train(rbm,SD,opt) # input data as training data for 1st RBM

    # Update RBM parameters to network.
    NN['layer'][2]['W']=rbm['W']
    NN['layer'][1]['B']=rbm['vB']
    NN['layer'][2]['B']=rbm['hB']

    # Propagate input to next layer.
    X=RBM.rbm_up(rbm,SD) #stochastic propagation.

    ### Train other hidden layers.
    for li in range(2,lAmt):
        # Construct RBM from current layer of network.
        rbm={}
        rbm['W']=NN['layer'][li]['W']
        rbm['vB']=NN['layer'][li-1]['B']
        rbm['hB']=NN['layer'][li]['B']

        # Training of RBM.
        rbm=RBM.rbm_train(rbm,X,opt)

        # Update RBM parameters to network.
        NN['layer'][li]['W']=rbm['W']
        NN['layer'][li-1]['B']=rbm['vB']
        NN['layer'][li]['B']=rbm['hB']

        # Propagate input to next layer.
        X=RBM.rbm_up(rbm,X,True) #stochastic propagation.


    return NN