コード例 #1
0
import numpy as np
import lasagne
import theano
import sys
import cPickle as pickle

save_detector = False

print('saving detector')
model_dir = 'results/models/'
model_file = model_dir + 'test_set_norfolk.mod'
print(model_file)

mod = pickle.load(open(model_file))

weights = get_all_param_values(mod.model.network['prob'])
np.save(model_file[:-4], weights)
print('weights shape', len(weights))

# save detection params
mod_params = {
    'win_size': 0,
    'chunk_size': 0,
    'max_freq': 0,
    'min_freq': 0,
    'mean_log_mag': 0,
    'slice_scale': 0,
    'overlap': 0,
    'crop_spec': False,
    'denoise': False,
    'smooth_spec': False,
コード例 #2
0
        train_loss = batch_iterator_train(X_train, y_train, BATCHSIZE, train_fn)
        train_eval.append(train_loss)

        valid_loss, acc_v = batch_iterator_valid(X_test, y_test, BATCHSIZE, valid_fn)
        valid_eval.append(valid_loss)
        valid_acc.append(acc_v)

        ratio = train_loss / valid_loss
        end = time.time() - start
        # print training details
        print 'iter:', epoch, '| TL:', np.round(train_loss,decimals=3), '| VL:', np.round(valid_loss,decimals=3), '| Vacc:', np.round(acc_v,decimals=3), '| Ratio:', np.round(ratio,decimals=2), '| Time:', np.round(end,decimals=1)

        if acc_v > best_acc:
            best_acc = acc_v
            best_params = helper.get_all_param_values(output_layer)

except KeyboardInterrupt:
    pass

print "Final Acc:", best_acc

# save weights
f = gzip.open('data/weights/%s_best.pklz'%experiment_label, 'wb')
pickle.dump(best_params, f)
f.close()

last_params = helper.get_all_param_values(output_layer)
f = gzip.open('data/weights/%s_last.pklz'%experiment_label, 'wb')
pickle.dump(last_params, f)
f.close()
コード例 #3
0
        valid_eval.append(valid_loss)
        valid_acc.append(1.0 - acc_v)

        ratio = train_loss / valid_loss
        end = time.time() - start
        # print training details
        print 'iter:', epoch, '| TL:', np.round(
            train_loss, decimals=3), '| VL:', np.round(
                valid_loss, decimals=3), '| Vacc:', np.round(
                    acc_v, decimals=3), '| Ratio:', np.round(
                        ratio, decimals=2), '| Time:', np.round(end,
                                                                decimals=1)

        if acc_v > best_acc:
            best_acc = acc_v
            best_params = helper.get_all_param_values(output_layer)

except KeyboardInterrupt:
    pass

print "Final Acc:", best_acc

# save weights
all_params = helper.get_all_param_values(output_layer)
f = gzip.open('data/weights/bottleneck_resnet.pklz', 'wb')
pickle.dump(best_params, f)
f.close()

# plot loss and accuracy
train_eval = np.array(train_eval)
valid_acc = np.array(valid_acc)
コード例 #4
0
def main():
    # load the training and validation data sets
    # labels=int(0.7*image.all_count)
    X = T.tensor4()

    # set up theano functions to generate output by feeding data through network
    output_layer_softmax , output_layer_triplet= lasagne_model()
    output_train = lasagne.layers.ReshapeLayer(output_layer_triplet,(-1,3,[1]))
    output_0= lasagne.layers.helper.get_output(lasagne.layers.SliceLayer(output_train,0,1),X)
    output_1= lasagne.layers.helper.get_output(lasagne.layers.SliceLayer(output_train,1,1),X)
    output_2= lasagne.layers.helper.get_output(lasagne.layers.SliceLayer(output_train,2,1),X)
    output= lasagne.layers.helper.get_output(output_layer_softmax,X)

    # set up the loss that we aim to minimize
    eps=1e-10
    dis_pos=T.sqrt(T.sum(T.square(T.sub(output_0,output_1)),1)+eps)
    dis_neg=T.sqrt(T.sum(T.square(T.sub(output_0,output_2)),1)+eps)
    dis=(dis_pos-dis_neg+alpha)
    # dis=(dis_pos-dis_neg)
    loss_train = T.mean((dis)*(dis>0))
    # loss_train = T.sum(T.nnet.relu(dis))
    # loss_train = T.mean(dis)

    # prediction functions for classifications
    pred = T.argmax(output, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer_triplet,trainable=True)
    #params = params[-4:]#TODO: !!!!!!!!!!!!!!!!!!!
    grad=T.grad(loss_train,params)

    # updates = nesterov_momentum(loss_train, params, learning_rate=0.03, momentum=0.9)
    updates =lasagne.updates.rmsprop(loss_train, params, learning_rate=0.0002)
    # updates =lasagne.updates.get_or_compute_grads(loss_train, params)

    # set up training and prediction functions
    train = theano.function(inputs=[X], outputs=[loss_train,pred,dis,dis_pos,dis_neg], updates=updates, allow_input_downcast=True)

    if load_params:
        pre_params=pickle.load(gzip.open(load_params))
        lasagne.layers.set_all_param_values(output_layer_softmax,pre_params)
        print 'load Success.'

    for i in range(4500):
        aver_loss=0
        for idx_batch in range (num_batches):
            train_X=np.zeros([BATCHSIZE,3,PIXELS,PIXELS])
            for iii in range(BATCHSIZE):
                label=random.choice(train_files)
                num_slots=random.randint(1,5)
                im_aim_list=random.sample(np.load(train_load_path+label),num_slots)
                tmp_sum=0
                for iidx,shot in enumerate(im_aim_list):
                    tmp_sum+=shot
                im_aim=tmp_sum/float(num_slots)
                # im_aim=tmp_sum

                im_aim_list=random.sample(np.load(train_load_path+label),num_slots)
                tmp_sum=0
                for iidx,shot in enumerate(im_aim_list):
                    tmp_sum+=shot
                im_pos=tmp_sum/float(num_slots)
                # im_pos=tmp_sum

                while True:
                    label_neg=random.choice(train_files)
                    if label!=label_neg:
                        im_neg_list=random.sample(np.load(train_load_path+label_neg),num_slots)
                        tmp_sum=0
                        for iidx,shot in enumerate(im_neg_list):
                            tmp_sum+=shot
                        im_neg=tmp_sum/float(num_slots)
                        # im_neg=tmp_sum
                        break

                train_X[iii,0]=im_aim
                train_X[iii,1]=im_pos
                train_X[iii,2]=im_neg

            train_X=train_X.reshape(BATCHSIZE*3,1,PIXELS,PIXELS)
            xx_batch = np.float32(train_X)
            # print xx_batch.shape
            # yy_batch = np.float32(train_y[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])

            train_loss ,pred ,dis ,dis1,dis2= train(xx_batch)
            aver_loss+=train_loss
            # count=np.count_nonzero(np.int32(pred ==np.argmax(yy_batch,axis=1)))
            if idx_batch%3==0:
                print i,idx_batch,'| Tloss:', train_loss,pred,'\ndis_pos:{}\ndis_neg:{}\ndis:{}'.format(dis1[:20],dis2[:20],dis[:20])
                # print pred
                # print np.argmax(yy_batch,axis=1)
                print "time:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())



        # save weights
        if i%1==0:
            aver_loss=aver_loss/num_batches
            all_params = helper.get_all_param_values(output_layer_softmax)
            f = gzip.open('speech_params/speech_{}_batchnorm_12345aver_{}_triplet_{}.pklz'.format(aver_loss,alpha,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
            pickle.dump(all_params, f)
            f.close()
コード例 #5
0
def main():
    # load the training and validation data sets
    train_X, test_X, train_y, test_y = load_data_cv('data/train.csv')

    X = T.ftensor4()
    Y = T.fmatrix()

    # set up theano functions to generate output by feeding data through network
    output_layer = lasagne_model()
    output_train = lasagne.layers.get_output(output_layer, X)
    output_valid = lasagne.layers.get_output(output_layer, X, deterministic=True)

    # set up the loss that we aim to minimize
    loss_train = T.mean(T.nnet.categorical_crossentropy(output_train, Y))
    loss_valid = T.mean(T.nnet.categorical_crossentropy(output_valid, Y))

    # prediction functions for classifications
    pred = T.argmax(output_train, axis=1)
    pred_valid = T.argmax(output_valid, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer)
    updates = nesterov_momentum(loss_train, params, learning_rate=0.003, momentum=0.9)

    # set up training and prediction functions
    train = theano.function(inputs=[X, Y], outputs=loss_train, updates=updates, allow_input_downcast=True)
    valid = theano.function(inputs=[X, Y], outputs=loss_valid, allow_input_downcast=True)
    predict_valid = theano.function(inputs=[X], outputs=pred_valid, allow_input_downcast=True)

    # loop over training functions for however many iterations, print information while training
    train_eval = []
    valid_eval = []
    valid_acc = []
    try:
        for i in range(45):
            train_loss = batch_iterator(train_X, train_y, BATCHSIZE, train)
            train_eval.append(train_loss)
            valid_loss = valid(test_X, test_y)
            valid_eval.append(valid_loss)
            acc = np.mean(np.argmax(test_y, axis=1) == predict_valid(test_X))
            valid_acc.append(acc)
            print 'iter:', i, '| Tloss:', train_loss, '| Vloss:', valid_loss, '| valid acc:', acc

    except KeyboardInterrupt:
        pass

    # save weights
    all_params = helper.get_all_param_values(output_layer)
    f = gzip.open('data/weights.pklz', 'wb')
    pickle.dump(all_params, f)
    f.close()

    # plot loss and accuracy
    train_eval = np.array(train_eval)
    valid_eval = np.array(valid_eval)
    valid_acc = np.array(valid_acc)
    sns.set_style("whitegrid")
    pyplot.plot(train_eval, linewidth = 3, label = 'train loss')
    pyplot.plot(valid_eval, linewidth = 3, label = 'valid loss')
    pyplot.legend(loc = 2)
    pyplot.twinx()
    pyplot.plot(valid_acc, linewidth = 3, label = 'valid accuracy', color = 'r')
    pyplot.grid()
    pyplot.ylim([.9,1])
    pyplot.legend(loc = 1)
    pyplot.savefig('data/training_plot.png')
コード例 #6
0
def main():
    # load the training and validation data sets
    labels=int(0.7*image.all_count)
    data=image.ddd
    train_X=np.zeros([size,1,PIXELS,PIXELS])
    train_y=np.zeros([size,labels])
    for i in range(size):
        label=random.sample(range(labels),1)[0]
        train_X[i,0]=0.01*random.sample(data[label],1)[0]
        train_y[i]=label_binarize([label],range(labels))[0]

    X = T.tensor4()
    Y = T.matrix()

    # set up theano functions to generate output by feeding data through network
    output_layer = lasagne_model()
    output_train = lasagne.layers.get_output(output_layer, X)
    output_valid = lasagne.layers.get_output(output_layer, X, deterministic=True)

    # set up the loss that we aim to minimize
    loss_train = T.mean(T.nnet.categorical_crossentropy(output_train, Y))
    loss_valid = T.mean(T.nnet.categorical_crossentropy(output_valid, Y))

    # prediction functions for classifications
    pred = T.argmax(output_train, axis=1)
    pred_valid = T.argmax(output_valid, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer)
    updates = nesterov_momentum(loss_train, params, learning_rate=0.03, momentum=0.9)
    # updates =lasagne.updates.adagrad(loss_train, params, learning_rate=0.003)

    # set up training and prediction functions
    train = theano.function(inputs=[X, Y], outputs=[loss_train,pred_valid], updates=updates, allow_input_downcast=True)
    valid = theano.function(inputs=[X, Y], outputs=loss_valid, allow_input_downcast=True)
    predict_valid = theano.function(inputs=[X], outputs=pred_valid, allow_input_downcast=True)

    # loop over training functions for however many iterations, print information while training
    train_eval = []
    valid_eval = []
    valid_acc = []

    for i in range(450):
        batch_total_number = len(train_X) / BATCHSIZE
        for idx_batch in range (batch_total_number):
            xx_batch = np.float32(train_X[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])
            yy_batch = np.float32(train_y[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])
               
            train_loss ,pred = train(xx_batch,yy_batch)
            print i,idx_batch,'| Tloss:', train_loss,'| Count:',np.count_nonzero(np.int32(pred ==np.argmax(yy_batch,axis=1)))
            print pred
            print np.argmax(yy_batch,axis=1)

        acc=0
        for j in range(batch_total_number):
            x_batch = np.float32(train_X[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])
            y_batch = np.float32(train_y[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])
            pred = predict_valid(x_batch)
            acc += np.count_nonzero(np.int32(pred ==np.argmax(y_batch,axis=1)))
        acc=float(acc)/(BATCHSIZE*batch_total_number)
        print 'iter:', i,idx_batch, '| Tloss:', train_loss,'|Acc:',acc


    # save weights
    all_params = helper.get_all_param_values(output_layer)
    f = gzip.open('params/weights.pklz', 'wb')
    pickle.dump(all_params, f)
    f.close()
コード例 #7
0
ファイル: c3d_lstm_tmp.py プロジェクト: TinBacon/C3D-LSTM-CTC
    #########################################################

    cost_eval_valid_lst = np.array(cost_eval_valid_lst)
    cost_eval_valid_mean = cost_eval_valid_lst.mean()

    logger.info("Epoch {} Acc Train = {}, Acc Test = {}".format(
        epoch, conf_train.accuracy(), conf_valid.accuracy()))

    logger.info(
        "Epoch {} cost_train_mean = {}, cost_eval_train_mean = {}, cost_eval_valid_mean = {}"
        .format(epoch, cost_train_mean, cost_eval_train_mean,
                cost_eval_valid_mean))

    if conf_valid.accuracy() > best_valid:
        best_valid = conf_valid.accuracy()
        best_params = helper.get_all_param_values(net['prob'])
        print 'get the current best_params'
        look_count = LOOK_AHEAD

        # save weights
        outfile_model = Dir_features + '/outfile_model/' + "R3DCNN.pkl"
        # print 'type(best_params):', type(best_params)
        # print 'len(best_params):', len(best_params)
        # print best_params
        f = open(outfile_model, 'wb')
        pickle.dump(best_params, f)
        f.close()

    else:
        look_count -= 1
コード例 #8
0
def main():
    # load the training and validation data sets
    # labels=int(0.7*speech.all_count)
    global valid_best
    data=speech.data_dict
    labels=data.keys()
    # assert (PIXELS,PIXELS)==speechSize
    train_X=np.zeros([num_speechs,1,speechSize[0],speechSize[1]])
    train_y=np.zeros([num_speechs,len(labels)])
    i=0
    for label in (data.keys()):
        for im in data[label]:
            train_X[i,0]=im
            train_y[i]=label_binarize([label],labels)[0]
            i+=1
            if i>=num_speechs:
                break
            if i%500==0:
                print 'idx of speechs:',i
        if i>=num_speechs:
            break
    zipp=zip(train_X,train_y)
    random.shuffle(zipp)
    xx=np.array([one[0] for one in zipp])
    yy=np.array([one[1] for one in zipp])
    del train_X,train_y
    train_X=xx[:size]
    train_y=yy[:size]
    valid_X=xx[size:]
    valid_y=yy[size:]
    del xx,yy
    print 'Shuffle finish. Begin to build model.'

    X = T.tensor4()
    Y = T.matrix()

    # set up theano functions to generate output by feeding data through network
    output_layer = lasagne_model()
    output_train = lasagne.layers.get_output(output_layer, X)
    output_valid = lasagne.layers.get_output(output_layer, X, deterministic=True)

    # set up the loss that we aim to minimize
    loss_train = T.mean(T.nnet.categorical_crossentropy(output_train, Y))
    loss_valid = T.mean(T.nnet.categorical_crossentropy(output_valid, Y))

    # prediction functions for classifications
    pred = T.argmax(output_train, axis=1)
    pred_valid = T.argmax(output_valid, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer,trainable=True)
    updates = nesterov_momentum(loss_train, params, learning_rate=0.003, momentum=0.9)
    # updates =lasagne.updates.sgd(loss_train, params, learning_rate=0.01)

    # set up training and prediction functions
    train = theano.function(inputs=[X, Y], outputs=[loss_train,pred], updates=updates, allow_input_downcast=True)
    valid = theano.function(inputs=[X, Y], outputs=[loss_valid,pred_valid], allow_input_downcast=True)
    # predict_valid = theano.function(inputs=[X], outputs=[pred_valid], allow_input_downcast=True)

    # loop over training functions for however many iterations, print information while training
    train_eval = []
    valid_eval = []
    valid_acc = []

    for i in range(450):
        batch_total_number = len(train_X) / BATCHSIZE
        for idx_batch in range (batch_total_number):
            xx_batch = np.float32(train_X[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])
            yy_batch = np.float32(train_y[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE])

            train_loss ,pred = train(xx_batch,yy_batch)
            count=np.count_nonzero(np.int32(pred ==np.argmax(yy_batch,axis=1)))
            print i,idx_batch,'| Tloss:', train_loss,'| Count:',count,'| Acc:',float(count)/(BATCHSIZE)
            print pred
            print np.argmax(yy_batch,axis=1)
            print "time:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

            if 1 and idx_batch%15==0:
                acc=0
                valid_batch_number=len(valid_X)/BATCHSIZE
                for j in tqdm(range(valid_batch_number)):
                    x_batch = np.float32(valid_X[j* BATCHSIZE:(j+ 1) * BATCHSIZE])
                    y_batch = np.float32(valid_y[j* BATCHSIZE:(j+ 1) * BATCHSIZE])
                    print len(x_batch),len(y_batch)
                    valid_loss,pred = valid(x_batch,y_batch)
                    # pred = predict_valid(x_batch)[0]
                    acc += np.count_nonzero(np.int32(pred ==np.argmax(y_batch,axis=1)))
                acc=float(acc)/(valid_batch_number*BATCHSIZE)
                print 'iter:', i,idx_batch, '| Vloss:',valid_loss,'|Acc:',acc
                if acc>valid_best:
                    print 'new valid_best:',valid_best,'-->',acc
                    valid_best=acc
                    all_params = helper.get_all_param_values(output_layer)
                    f = gzip.open('speech_params/validbest_cnn_allbatchnorm_{}_{}_{}.pklz'.format(i,valid_best,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
                    pickle.dump(all_params, f)
                    f.close()

        # save weights
        if i%5:
            all_params = helper.get_all_param_values(output_layer)
            f = gzip.open('speech_params/validbest_cnn_allbatchnorm_{}_{}_{}.pklz'.format(i,acc,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
            pickle.dump(all_params, f)
            f.close()
コード例 #9
0
ファイル: mnist_cnn.py プロジェクト: afcarl/lasagne_mnist
def main():
    # load the training and validation data sets
    train_X, test_X, train_y, test_y = load_data_cv('data/train.csv')

    X = T.ftensor4()
    Y = T.fmatrix()

    # set up theano functions to generate output by feeding data through network
    output_layer = lasagne_model()
    output_train = lasagne.layers.get_output(output_layer, X)
    output_valid = lasagne.layers.get_output(output_layer,
                                             X,
                                             deterministic=True)

    # set up the loss that we aim to minimize
    loss_train = T.mean(T.nnet.categorical_crossentropy(output_train, Y))
    loss_valid = T.mean(T.nnet.categorical_crossentropy(output_valid, Y))

    # prediction functions for classifications
    pred = T.argmax(output_train, axis=1)
    pred_valid = T.argmax(output_valid, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer)
    updates = nesterov_momentum(loss_train,
                                params,
                                learning_rate=0.003,
                                momentum=0.9)

    # set up training and prediction functions
    train = theano.function(inputs=[X, Y],
                            outputs=loss_train,
                            updates=updates,
                            allow_input_downcast=True)
    valid = theano.function(inputs=[X, Y],
                            outputs=loss_valid,
                            allow_input_downcast=True)
    predict_valid = theano.function(inputs=[X],
                                    outputs=pred_valid,
                                    allow_input_downcast=True)

    # loop over training functions for however many iterations, print information while training
    train_eval = []
    valid_eval = []
    valid_acc = []
    try:
        for i in range(45):
            train_loss = batch_iterator(train_X, train_y, BATCHSIZE, train)
            train_eval.append(train_loss)
            valid_loss = valid(test_X, test_y)
            valid_eval.append(valid_loss)
            acc = np.mean(np.argmax(test_y, axis=1) == predict_valid(test_X))
            valid_acc.append(acc)
            print 'iter:', i, '| Tloss:', train_loss, '| Vloss:', valid_loss, '| valid acc:', acc

    except KeyboardInterrupt:
        pass

    # save weights
    all_params = helper.get_all_param_values(output_layer)
    f = gzip.open('data/weights.pklz', 'wb')
    pickle.dump(all_params, f)
    f.close()

    # plot loss and accuracy
    train_eval = np.array(train_eval)
    valid_eval = np.array(valid_eval)
    valid_acc = np.array(valid_acc)
    sns.set_style("whitegrid")
    pyplot.plot(train_eval, linewidth=3, label='train loss')
    pyplot.plot(valid_eval, linewidth=3, label='valid loss')
    pyplot.legend(loc=2)
    pyplot.twinx()
    pyplot.plot(valid_acc, linewidth=3, label='valid accuracy', color='r')
    pyplot.grid()
    pyplot.ylim([.9, 1])
    pyplot.legend(loc=1)
    pyplot.savefig('data/training_plot.png')
コード例 #10
0
loss = loss + l2_penalty

params = get_all_params(l_y, trainable=True)
updates = adam(loss, params, learning_rate=learning_rate)

meta_data["num_param"] = lasagne.layers.count_params(l_y)
print "number of parameters: ", meta_data["num_param"]

print "... compiling"
train_fn = theano.function(inputs=[X, y], outputs=loss, updates=updates)
val_fn = theano.function(inputs=[X, y], outputs=[loss, accuracy])
op_fn = theano.function([X], outputs=prediction_clean)

print "... loading dataset"
if meta_data["dataset"] == 'omniglot':
    worker = OmniglotOS(image_size=image_size, batch_size=batch_size)
elif meta_data["dataset"] == 'lfw':
    worker = LFWVerif(image_size=image_size, batch_size=batch_size)

meta_data, best_params = train(train_fn, val_fn, worker, meta_data, \
 get_params=lambda: helper.get_all_param_values(l_y))

if meta_data["testing"]:
    print "... testing"
    helper.set_all_param_values(l_y, best_params)
    meta_data = test(val_fn, worker, meta_data)

serialize(params, expt_name + '.params')
serialize(meta_data, expt_name + '.mtd')
serialize(op_fn, expt_name + '.opf')
コード例 #11
0
    embedding_fn = create_embedder_fn(glimpses)

    X = T.matrix("embedding")
    y = T.imatrix("target")
    l_in = InputLayer(shape=(None, 512), input_var=X)
    l_y = DenseLayer(l_in, 1, nonlinearity=sigmoid)
    prediction = get_output(l_y)
    loss = T.mean(binary_crossentropy(prediction, y))
    accuracy = T.mean(binary_accuracy(prediction, y))
    params = get_all_params(l_y)
    updates = adam(loss, params, learning_rate=1e-3)
    train_fn = theano.function([X, y], outputs=loss, updates=updates)
    val_fn = theano.function([X, y], outputs=[loss, accuracy])

    for i in range(250):
        X_train, y_train = worker.fetch_batch('train')
        train_fn(embedding_fn(X_train), y_train)

    X_train, y_train = worker.fetch_batch('train')
    train_loss = train_fn(embedding_fn(X_train), y_train)
    val_loss, val_acc = val_fn(embedding_fn(X_test), y_test)
    print "number of glimpses per image: ", glimpses
    print "\ttraining performance:"
    print "\t\t loss:", train_loss
    print "\ttesting performance:"
    print "\t\t loss:", val_loss
    print "\t\t accuracy:", val_acc

    params = helper.get_all_param_values(l_y)
    serialize(params, str(glimpses) + 'glimpses' + '.params')
コード例 #12
0
def main():
    # load the training and validation data sets
    # labels=int(0.7*speech.all_count)
    global valid_best

    X = T.tensor4()
    Y = T.matrix()

    # set up theano functions to generate output by feeding data through network
    output_layer,hidden_layer = lasagne_model()
    output_train = lasagne.layers.get_output(output_layer, X)
    output_valid = lasagne.layers.get_output(output_layer, X, deterministic=True)

    # set up the loss that we aim to minimize
    loss_train = T.mean(T.nnet.categorical_crossentropy(output_train, Y))
    loss_valid = T.mean(T.nnet.categorical_crossentropy(output_valid, Y))

    # prediction functions for classifications
    pred = T.argmax(output_train, axis=1)
    pred_valid = T.argmax(output_valid, axis=1)

    # get parameters from network and set up sgd with nesterov momentum to update parameters
    params = lasagne.layers.get_all_params(output_layer,trainable=True)
    print params
    updates = nesterov_momentum(loss_train, params, learning_rate=0.2, momentum=0.9)
    # updates =lasagne.updates.sgd(loss_train, params, learning_rate=0.1)

    # set up training and prediction functions
    train = theano.function(inputs=[X, Y], outputs=[loss_train,pred], updates=updates, allow_input_downcast=True)
    valid = theano.function(inputs=[X, Y], outputs=[loss_valid,pred_valid], allow_input_downcast=True)
    # predict_valid = theano.function(inputs=[X], outputs=[pred_valid], allow_input_downcast=True)

    # loop over training functions for however many iterations, print information while training
    train_eval = []
    valid_eval = []
    valid_acc = []

    if 0:
        # pre_params = 'speech_params/validbest_cnn_spkall_22_0.95458984375_2017-06-24 00:50:39.pklz'
        pre_params='speech_params/validbest_cnn_fisher_0_idxbatch20000_0.65625_2017-08-17 16:14:04.pklz' # 1 shot: 99.0 2000多次
        load_params = pickle.load(gzip.open(pre_params))
        # load_params=load_params[:-2]
        lasagne.layers.set_all_param_values(output_layer,load_params)
        print 'load params: ', pre_params,'\n'

    for i in range(450):
        train_list,valid_list=get_data(train_files,num_speechs,size,valid_size)
        batch_total_number = size / BATCHSIZE
        if 1:
            valid_list_limit=3000
            valid_list=valid_list[:valid_list_limit]
        print 'batch_total_number:',batch_total_number
        train_acc_aver=0.0
        for idx_batch in range (batch_total_number):
            batch_list = train_list[idx_batch * BATCHSIZE:(idx_batch + 1) * BATCHSIZE]
            xx_batch=np.zeros((BATCHSIZE,1,speechSize[0],speechSize[1]))
            yy_batch=np.zeros((BATCHSIZE,num_labels_train))
            for ind,one_name in enumerate(batch_list):
                aim_file_name,aim_idx=one_name.split('.')
                aim_file_name+='.npy'
                aim_file_name_full=train_load_path+aim_file_name
                xx_batch[ind,0]=np.load(aim_file_name_full)[int(aim_idx)]
                yy_batch[ind]=label_binarize([train_files.index(aim_file_name)],range(num_labels_train))[0]

            train_loss ,pred = train(xx_batch,yy_batch)
            count=np.count_nonzero(np.int32(pred ==np.argmax(yy_batch,axis=1)))
            train_acc = float(count) / (BATCHSIZE)
            print i,idx_batch,'| Tloss:', train_loss,'| Count:',count,'| Acc:',train_acc
            print pred
            print np.argmax(yy_batch,axis=1)
            print "time:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            train_acc_aver += train_acc

            # raise EOFError

            if train_acc>0.9 and idx_batch%1000==0 and idx_batch>=0:
                acc=0
                valid_batch_number=len(valid_list)/BATCHSIZE
                for j in tqdm(range(valid_batch_number)):
                    batch_list = valid_list[j * BATCHSIZE:(j + 1) * BATCHSIZE]
                    x_batch=np.zeros((BATCHSIZE,1,speechSize[0],speechSize[1]))
                    y_batch=np.zeros((BATCHSIZE,num_labels_train))
                    for ind,one_name in enumerate(batch_list):
                        aim_file_name,aim_idx=one_name.split('.')
                        aim_file_name+='.npy'
                        aim_file_name_full=train_load_path+aim_file_name
                        x_batch[ind,0]=np.load(aim_file_name_full)[int(aim_idx)]
                        y_batch[ind]=label_binarize([train_files.index(aim_file_name)],range(num_labels_train))[0]
                    valid_loss,pred = valid(x_batch,y_batch)
                    acc += np.count_nonzero(np.int32(pred ==np.argmax(y_batch,axis=1)))
                acc=float(acc)/(valid_batch_number*BATCHSIZE)
                print 'iter:', i,idx_batch, '| Vloss:',valid_loss,'|Acc:',acc
                if acc>valid_best:
                    print 'new valid_best:',valid_best,'-->',acc
                    valid_best=acc
                    all_params = helper.get_all_param_values(output_layer)
                    f = gzip.open('speech_params/validbest_cnn_fisher_{}_validacc{}_{}.pklz'.format(i,valid_best,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
                    pickle.dump(all_params, f)
                    f.close()

            if idx_batch%3000==0 and idx_batch>0:
                all_params = helper.get_all_param_values(output_layer)
                f = gzip.open('speech_params/validbest_cnn_fisher_{}_idxbatch{}_{}.pklz'.format(i,idx_batch,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
                pickle.dump(all_params, f)
                f.close()

        # save weights
        if i%1==0:
            all_params = helper.get_all_param_values(output_layer)
            f = gzip.open('speech_params/validbest_cnn_fisher_averacc{}_{}_{}.pklz'.format(i,train_acc_aver/batch_total_number,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), 'wb')
            pickle.dump(all_params, f)
            f.close()