测试keras和mxnet的速度


测试一下keras和mxnet的速度

win10 64 cuda8.0 cudnn5.1 gtx1060

cnn mnist


[python]  view plain  copy
  1. import numpy  
  2. import os  
  3. import urllib  
  4. import gzip  
  5. import struct  
  6. def read_data(label_name, image_name):  
  7.     s=os.getenv('DATA')  
  8.     with gzip.open(os.getenv('DATA')+'\\MNIST\\'+label_name) as flbl:  
  9.         magic, num = struct.unpack(">II", flbl.read(8))  
  10.         label = numpy.fromstring(flbl.read(), dtype=numpy.int8)  
  11.     with gzip.open(os.getenv('DATA')+'\\MNIST\\'+image_name, 'rb') as fimg:  
  12.         magic, num, rows, cols = struct.unpack(">IIII", fimg.read(16))  
  13.         image = numpy.fromstring(fimg.read(), dtype=numpy.uint8).reshape(len(label), rows, cols)  
  14.     return (label, image)  
  15. (train_lbl, train_img) = read_data('train-labels-idx1-ubyte.gz''train-images-idx3-ubyte.gz')  
  16. (val_lbl, val_img) = read_data('t10k-labels-idx1-ubyte.gz','t10k-images-idx3-ubyte.gz')  
  17. def to4d(img):  
  18.     return img.reshape(img.shape[0], 12828).astype(numpy.float32)/255  
  19. def repack_data(d):  
  20.     t = numpy.zeros((d.size, 10))  
  21.     for i in range(d.size):  
  22.         t[i][d[i]] = 1  
  23.     return t  
  24. train_img=to4d(train_img)  
  25. val_img=to4d(val_img)  
  26. batch_size = 100  
  27. num_epoch =5  
  28. #backend='mxnet'  
  29. backend='keras'  
  30. if backend=='keras':  
  31.     from keras.models import *  
  32.     from keras.layers import *  
  33.     from keras.optimizers import *  
  34.     model = Sequential()  
  35.     model.add(Convolution2D(6455, input_shape=(1,28,28), init='uniform', activation='relu'))  
  36.     model.add(MaxPooling2D())  
  37.     model.add(Convolution2D(12855, init='uniform', activation='relu'))  
  38.     model.add(MaxPooling2D())  
  39.     model.add(Flatten())  
  40.     model.add(Dense(1024, init='uniform', activation='relu'))  
  41.     model.add(Dense(1024, init='uniform', activation='relu'))  
  42.     model.add(Dense(10, init='uniform', activation='softmax'))  
  43.     model.summary()  
  44.     model.compile(loss='categorical_crossentropy', optimizer=adadelta(), metrics=['accuracy'])  
  45.     model.fit(train_img,repack_data(train_lbl),batch_size=batch_size,nb_epoch=num_epoch,validation_data=(val_img,repack_data(val_lbl)))  
  46. else:  
  47.     import mxnet  
  48.     train_iter = mxnet.io.NDArrayIter(train_img, train_lbl, batch_size, shuffle=True)  
  49.     val_iter = mxnet.io.NDArrayIter(val_img, val_lbl, batch_size)  
  50.     data = mxnet.symbol.Variable('data')  
  51.     conv1 = mxnet.sym.Convolution(data=data, kernel=(55), num_filter=64)  
  52.     relu1 = mxnet.sym.Activation(data=conv1, act_type="relu")  
  53.     pool1 = mxnet.sym.Pooling(data=relu1, pool_type="max", kernel=(22), stride=(22))  
  54.     conv2 = mxnet.sym.Convolution(data=pool1, kernel=(55), num_filter=128)  
  55.     relu2 = mxnet.sym.Activation(data=conv2, act_type="relu")  
  56.     pool2 = mxnet.sym.Pooling(data=relu2, pool_type="max", kernel=(22), stride=(22))  
  57.     flatten = mxnet.sym.Flatten(data=pool2)  
  58.     fc1 = mxnet.symbol.FullyConnected(data=flatten, num_hidden=1024)  
  59.     relu3 = mxnet.sym.Activation(data=fc1, act_type="relu")  
  60.     fc2 = mxnet.symbol.FullyConnected(data=relu3, num_hidden=1024)  
  61.     relu4 = mxnet.sym.Activation(data=fc2, act_type="relu")  
  62.     fc3 = mxnet.sym.FullyConnected(data=relu4, num_hidden=10)  
  63.     net = mxnet.sym.SoftmaxOutput(data=fc3, name='softmax')  
  64.     mxnet.viz.plot_network(symbol=net, shape= {"data" : (batch_size, 12828)}).render('mxnet')  
  65.     model = mxnet.model.FeedForward(  
  66.         ctx=mxnet.gpu(0),  # use GPU 0 for training, others are same as before  
  67.         symbol=net,  
  68.         num_epoch=num_epoch,  
  69.         learning_rate=0.1,  
  70.         optimizer='AdaDelta',  
  71.         initializer=mxnet.initializer.Uniform())  
  72.     import logging  
  73.     logging.getLogger().setLevel(logging.DEBUG)  
  74.     model.fit(  
  75.         X=train_iter,  
  76.         eval_data=val_iter,  
  77.         batch_end_callback=mxnet.callback.Speedometer(batch_size, 200)  
  78.     )  



____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution2d_1 (Convolution2D)  (None, 64, 24, 24)    1664        convolution2d_input_1[0][0]      
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D)    (None, 64, 12, 12)    0           convolution2d_1[0][0]            
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D)  (None, 128, 8, 8)     204928      maxpooling2d_1[0][0]             
____________________________________________________________________________________________________
maxpooling2d_2 (MaxPooling2D)    (None, 128, 4, 4)     0           convolution2d_2[0][0]            
____________________________________________________________________________________________________
flatten_1 (Flatten)              (None, 2048)          0           maxpooling2d_2[0][0]             
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 1024)          2098176     flatten_1[0][0]                  
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 1024)          1049600     dense_1[0][0]                    
____________________________________________________________________________________________________
dense_3 (Dense)                  (None, 10)            10250       dense_2[0][0]                    
====================================================================================================
Total params: 3364618
____________________________________________________________________________________________________


keras+theano

Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 7s - loss: 0.1975 - acc: 0.9379 - val_loss: 0.0450 - val_acc: 0.9856
Epoch 2/5
60000/60000 [==============================] - 7s - loss: 0.0449 - acc: 0.9857 - val_loss: 0.0351 - val_acc: 0.9891
Epoch 3/5
60000/60000 [==============================] - 7s - loss: 0.0303 - acc: 0.9907 - val_loss: 0.0248 - val_acc: 0.9921
Epoch 4/5
60000/60000 [==============================] - 7s - loss: 0.0207 - acc: 0.9932 - val_loss: 0.0257 - val_acc: 0.9920
Epoch 5/5
60000/60000 [==============================] - 7s - loss: 0.0151 - acc: 0.9954 - val_loss: 0.0232 - val_acc: 0.9929


mxnet

INFO:root:Start training with [gpu(0)]
INFO:root:Epoch[0] Batch [200] Speed: 2960.54 samples/secTrain-accuracy=0.845600
INFO:root:Epoch[0] Batch [400] Speed: 2878.78 samples/secTrain-accuracy=0.975150
INFO:root:Epoch[0] Batch [600] Speed: 2875.59 samples/secTrain-accuracy=0.980750
INFO:root:Epoch[0] Resetting Data Iterator
INFO:root:Epoch[0] Time cost=21.459
INFO:root:Epoch[0] Validation-accuracy=0.986700
INFO:root:Epoch[1] Batch [200] Speed: 2888.17 samples/secTrain-accuracy=0.985850
INFO:root:Epoch[1] Batch [400] Speed: 2867.33 samples/secTrain-accuracy=0.988150
INFO:root:Epoch[1] Batch [600] Speed: 2867.63 samples/secTrain-accuracy=0.990200
INFO:root:Epoch[1] Resetting Data Iterator
INFO:root:Epoch[1] Time cost=20.874
INFO:root:Epoch[1] Validation-accuracy=0.980700
INFO:root:Epoch[2] Batch [200] Speed: 2894.78 samples/secTrain-accuracy=0.992200
INFO:root:Epoch[2] Batch [400] Speed: 2876.13 samples/secTrain-accuracy=0.993150
INFO:root:Epoch[2] Batch [600] Speed: 2858.85 samples/secTrain-accuracy=0.994650
INFO:root:Epoch[2] Resetting Data Iterator
INFO:root:Epoch[2] Time cost=20.875
INFO:root:Epoch[2] Validation-accuracy=0.990300
INFO:root:Epoch[3] Batch [200] Speed: 2879.48 samples/secTrain-accuracy=0.994600
INFO:root:Epoch[3] Batch [400] Speed: 2859.86 samples/secTrain-accuracy=0.995800
INFO:root:Epoch[3] Batch [600] Speed: 2860.25 samples/secTrain-accuracy=0.995800
INFO:root:Epoch[3] Resetting Data Iterator
INFO:root:Epoch[3] Time cost=20.951
INFO:root:Epoch[3] Validation-accuracy=0.990300
INFO:root:Epoch[4] Batch [200] Speed: 2887.86 samples/secTrain-accuracy=0.995750
INFO:root:Epoch[4] Batch [400] Speed: 2865.84 samples/secTrain-accuracy=0.997100
INFO:root:Epoch[4] Batch [600] Speed: 2868.30 samples/secTrain-accuracy=0.997700
INFO:root:Epoch[4] Resetting Data Iterator
INFO:root:Epoch[4] Time cost=20.915
INFO:root:Epoch[4] Validation-accuracy=0.988300


keras的速度我挺满意的,基本上达到了同类卡应该有的效果,而且gpu经常100%

但是theano后端的编译速度好慢好慢好慢!

mxnet好慢啊,三倍时间啊!跑一个官方例子也比gtx980慢一倍,感觉是什么地方配置跪了

不过我发现mxnet训练的时候cpu一直是100,可能是这个原因。。。。


悲伤的故事


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值