Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚPythonµÄ¾í»ýÉñ¾­ÍøÂçºÍÌØÕ÷ÌáÈ¡
 
×÷ÕߣºChristian S.Peron À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-8-31
  4102  次浏览      28
 

ÕªÒª£º±¾ÎÄչʾÁËÈçºÎ»ùÓÚnolearnʹÓÃһЩ¾í»ý²ãºÍ³Ø»¯²ãÀ´½¨Á¢Ò»¸ö¼òµ¥µÄConvNetÌåϵ½á¹¹£¬ÒÔ¼°ÈçºÎʹÓÃConvNetȥѵÁ·Ò»¸öÌØÕ÷ÌáÈ¡Æ÷£¬È»ºóÔÚʹÓÃÈçSVM¡¢Logistic»Ø¹éµÈ²»Í¬µÄÄ£ÐÍ֮ǰʹÓÃËüÀ´½øÐÐÌØÕ÷ÌáÈ¡¡£

¾í»ýÉñ¾­ÍøÂ磨ConvNets£©ÊÇÊÜÉúÎïÆô·¢µÄMLPs£¨¶à²ã¸ÐÖªÆ÷£©£¬ËüÃÇÓÐ×Ų»Í¬Àà±ðµÄ²ã£¬²¢ÇÒÿ²ãµÄ¹¤×÷·½Ê½ÓëÆÕͨµÄMLP²ãÒ²ÓÐËù²îÒì¡£Èç¹ûÄã¶ÔConvNets¸ÐÐËȤ£¬ÕâÀïÓиöºÜºÃµÄ½Ì³ÌCS231n ¨C Convolutional Neural Newtorks for Visual Recognition¡£CNNsµÄÌåϵ½á¹¹ÈçÏÂËùʾ£º


³£¹æµÄÉñ¾­ÍøÂ磨À´×ÔCS231nÍøÕ¾£©


ConvNetÍøÂçÌåϵ½á¹¹£¨À´×ÔCS231nÍøÕ¾£©

ÈçÄãËù¼û£¬ConvNets¹¤×÷ʱ°éËæ×Å3D¾í»ý²¢ÇÒÔÚ²»¶Ïת±ä×ÅÕâЩ3D¾í»ý¡£ÎÒÔÚÕâÆªÎÄÕÂÖв»»áÔÙÖØ¸´Õû¸öCS231nµÄ½Ì³Ì£¬ËùÒÔÈç¹ûÄãÕæµÄ¸ÐÐËȤ£¬ÇëÔÚ¼ÌÐøÔĶÁ֮ǰÏÈ»¨µãʱ¼äȥѧϰһÏ¡£

Lasagne ºÍ nolearn

LasagneºÍnolearnÊÇÎÒ×îϲ»¶Ê¹ÓõÄÉî¶ÈѧϰPython°ü¡£LasagneÊÇ»ùÓÚTheanoµÄ£¬ËùÒÔGPUµÄ¼ÓËÙ½«´óÓв»Í¬£¬²¢ÇÒÆä¶ÔÉñ¾­ÍøÂç´´½¨µÄÉùÃ÷·½·¨Ò²ºÜÓаïÖú¡£nolearn¿âÊÇÒ»¸öÉñ¾­ÍøÂçÈí¼þ°üʵÓóÌÐò¼¯£¨°üº¬Lasagne£©£¬ËüÔÚÉñ¾­ÍøÂçÌåϵ½á¹¹µÄ´´½¨¹ý³ÌÉÏ¡¢¸÷²ãµÄ¼ìÑéµÈ¶¼Äܹ»¸øÎÒÃǺܴóµÄ°ïÖú¡£

ÔÚÕâÆªÎÄÕÂÖÐÎÒҪչʾµÄÊÇ£¬ÈçºÎʹÓÃһЩ¾í»ý²ãºÍ³Ø»¯²ãÀ´½¨Á¢Ò»¸ö¼òµ¥µÄConvNetÌåϵ½á¹¹¡£ÎÒ»¹½«ÏòÄãչʾÈçºÎʹÓÃConvNetȥѵÁ·Ò»¸öÌØÕ÷ÌáÈ¡Æ÷£¬ÔÚʹÓÃÈçSVM¡¢Logistic»Ø¹éµÈ²»Í¬µÄÄ£ÐÍ֮ǰʹÓÃËüÀ´½øÐÐÌØÕ÷ÌáÈ¡¡£´ó¶àÊýÈËʹÓõÄÊÇԤѵÁ·ConvNetÄ£ÐÍ£¬È»ºóɾ³ý×îºóÒ»¸öÊä³ö²ã£¬½Ó×Å´ÓImageNetsÊý¾Ý¼¯ÉÏѵÁ·µÄConvNetsÍøÂçÌáÈ¡ÌØÕ÷¡£Õâͨ³£±»³ÆÎªÊÇÇ¨ÒÆÑ§Ï°£¬ÒòΪ¶ÔÓÚ²»Í¬µÄÎÊÌâÄã¿ÉÒÔʹÓÃÀ´×ÔÆäËüµÄConvNets²ã£¬ÓÉÓÚConvNetsµÄµÚÒ»²ã¹ýÂËÆ÷±»µ±×öÊÇÒ»¸ö±ßԵ̽²âÆ÷£¬ËùÒÔËüÃÇ¿ÉÒÔÓÃÀ´×÷ΪÆäËüÎÊÌâµÄÆÕÍ¨ÌØÕ÷̽²âÆ÷¡£

¼ÓÔØMNISTÊý¾Ý¼¯

MNISTÊý¾Ý¼¯ÊÇÓÃÓÚÊý×Öʶ±ð×ͳµÄÊý¾Ý¼¯Ö®Ò»¡£ÎÒÃÇʹÓõÄÊÇÒ»¸öÃæÏòPythonµÄ°æ±¾£¬µ«ÏÈÈÃÎÒÃǵ¼ÈëÐèҪʹÓõİü£º

import matplotlib  
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from urllib import urlretrieve
import cPickle as pickle
import os
import gzip
import numpy as np
import theano
import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet
from nolearn.lasagne import visualize
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

ÕýÈçÄãËù¿´µ½µÄ£¬ÎÒÃǵ¼ÈëÁËÓÃÓÚ»æÍ¼µÄmatplotlib°ü£¬Ò»Ð©ÓÃÓÚÏÂÔØMNISTÊý¾Ý¼¯µÄÔ­ÉúPythonÄ£¿é£¬numpy£¬ theano£¬lasagne£¬nolearn ÒÔ¼° scikit-learn¿âÖÐÓÃÓÚÄ£ÐÍÆÀ¹ÀµÄһЩº¯Êý¡£

È»ºó£¬ÎÒÃǶ¨ÒåÒ»¸ö¼ÓÔØMNISTÊý¾Ý¼¯µÄº¯Êý£¨Õâ¸ö¹¦ÄÜÓëLasagne½Ì³ÌÉÏʹÓõķdz£ÏàËÆ£©

def load_dataset():  
url = 'http://deeplearning.net/data/mnist/mnist.pkl.gz'
filename = 'mnist.pkl.gz'
if not os.path.exists(filename):
print("Downloading MNIST dataset...")
urlretrieve(url, filename)
with gzip.open(filename, 'rb') as f:
data = pickle.load(f)
X_train, y_train = data[0]
X_val, y_val = data[1]
X_test, y_test = data[2]
X_train = X_train.reshape((-1, 1, 28, 28))
X_val = X_val.reshape((-1, 1, 28, 28))
X_test = X_test.reshape((-1, 1, 28, 28))
y_train = y_train.astype(np.uint8)
y_val = y_val.astype(np.uint8)
y_test = y_test.astype(np.uint8)
return X_train, y_train, X_val, y_val, X_test, y_test

ÕýÈçÄã¿´µ½µÄ£¬ÎÒÃÇÕýÔÚÏÂÔØ´¦Àí¹ýµÄMNISTÊý¾Ý¼¯£¬½Ó×ŰÑËü²ð·ÖΪÈý¸ö²»Í¬µÄÊý¾Ý¼¯£¬·Ö±ðÊÇ£ºÑµÁ·¼¯¡¢ÑéÖ¤¼¯ºÍ²âÊÔ¼¯¡£È»ºóÖØÖÃͼÏñÄÚÈÝ£¬ÎªÖ®ºóµÄLasagneÊäÈë²ã×ö×¼±¸£¬Óë´Ëͬʱ£¬ÓÉÓÚGPU/theanoÊý¾ÝÀàÐ͵ÄÏÞÖÆ£¬ÎÒÃÇ»¹°ÑnumpyµÄÊý¾ÝÀàÐÍת»»³ÉÁËuint8¡£

Ëæºó£¬ÎÒÃÇ×¼±¸¼ÓÔØMNISTÊý¾Ý¼¯²¢¼ìÑéËü£º

X_train, y_train, X_val, y_val, X_test, y_test = load_dataset()  
plt.imshow(X_train[0][0], cmap=cm.binary)

Õâ¸ö´úÂ뽫Êä³öÏÂÃæµÄͼÏñ£¨ÎÒÓõÄÊÇIPython Notebook£©


Ò»¸öMNISTÊý¾Ý¼¯µÄÊý×ÖʵÀý£¨¸ÃʵÀýÊÇ5£©

ConvNetÌåϵ½á¹¹ÓëѵÁ·

ÏÖÔÚ£¬¶¨ÒåÎÒÃǵÄConvNetÌåϵ½á¹¹£¬È»ºóʹÓõ¥GPU/CPUÀ´ÑµÁ·Ëü£¨ÎÒÓÐÒ»¸ö·Ç³£Á®¼ÛµÄGPU£¬µ«ËüºÜÓÐÓã©

net1 = NeuralNet(  
layers=[('input', layers.InputLayer),
('conv2d1', layers.Conv2DLayer),
('maxpool1', layers.MaxPool2DLayer),
('conv2d2', layers.Conv2DLayer),
('maxpool2', layers.MaxPool2DLayer),
('dropout1', layers.DropoutLayer),
('dense', layers.DenseLayer),
('dropout2', layers.DropoutLayer),
('output', layers.DenseLayer),
],
# input layer
input_shape=(None, 1, 28, 28),
# layer conv2d1
conv2d1_num_filters=32,
conv2d1_filter_size=(5, 5),
conv2d1_nonlinearity=lasagne.nonlinearities.rectify,
conv2d1_W=lasagne.init.GlorotUniform(),
# layer maxpool1
maxpool1_pool_size=(2, 2),
# layer conv2d2
conv2d2_num_filters=32,
conv2d2_filter_size=(5, 5),
conv2d2_nonlinearity=lasagne.nonlinearities.rectify,
# layer maxpool2
maxpool2_pool_size=(2, 2),
# dropout1
dropout1_p=0.5,
# dense
dense_num_units=256,
dense_nonlinearity=lasagne.nonlinearities.rectify,
# dropout2
dropout2_p=0.5,
# output
output_nonlinearity=lasagne.nonlinearities.softmax,
output_num_units=10,
# optimization method params
update=nesterov_momentum,
update_learning_rate=0.01,
update_momentum=0.9,
max_epochs=10,
verbose=1,
)
# Train the network
nn = net1.fit(X_train, y_train)

ÈçÄãËùÊÓ£¬ÔÚlayersµÄ²ÎÊýÖУ¬ÎÒÃǶ¨ÒåÁËÒ»¸öÓвãÃû³Æ/ÀàÐ͵ÄÔª×é×ֵ䣬Ȼºó¶¨ÒåÁËÕâЩ²ãµÄ²ÎÊý¡£ÔÚÕâÀÎÒÃǵÄÌåϵ½á¹¹Ê¹ÓõÄÊÇÁ½¸ö¾í»ý²ã£¬Á½¸ö³Ø»¯²ã£¬Ò»¸öÈ«Á¬½Ó²ã£¨³íÃܲ㣬dense layer£©ºÍÒ»¸öÊä³ö²ã¡£ÔÚһЩ²ãÖ®¼äÒ²»áÓÐdropout²ã£¬dropout²ãÊÇÒ»¸öÕýÔò»¯¾ØÕó£¬Ëæ»úµÄÉèÖÃÊäÈëֵΪÁãÀ´±ÜÃâ¹ýÄâºÏ£¨¼ûÏÂͼ£©¡£


Dropout²ãЧ¹û£¨À´×ÔCS231nÍøÕ¾£©

µ÷ÓÃѵÁ··½·¨ºó£¬nolearn°ü½«»áÏÔʾѧϰ¹ý³ÌµÄ״̬£¬ÎҵĻúÆ÷ʹÓõÄÊǵͶ˵ĵÄGPU£¬µÃµ½µÄ½á¹ûÈçÏ£º

# Neural Network with 160362 learnable parameters  

## Layer information

# name size
--- -------- --------
0 input 1x28x28
1 conv2d1 32x24x24
2 maxpool1 32x12x12
3 conv2d2 32x8x8
4 maxpool2 32x4x4
5 dropout1 32x4x4
6 dense 256
7 dropout2 256
8 output 10

epoch train loss valid loss train/val valid acc dur
------- ------------ ------------ ----------- --------- ---
1 0.85204 0.16707 5.09977 0.95174 33.71s
2 0.27571 0.10732 2.56896 0.96825 33.34s
3 0.20262 0.08567 2.36524 0.97488 33.51s
4 0.16551 0.07695 2.15081 0.97705 33.50s
5 0.14173 0.06803 2.08322 0.98061 34.38s
6 0.12519 0.06067 2.06352 0.98239 34.02s
7 0.11077 0.05532 2.00254 0.98427 33.78s
8 0.10497 0.05771 1.81898 0.98248 34.17s
9 0.09881 0.05159 1.91509 0.98407 33.80s
10 0.09264 0.04958 1.86864 0.98526 33.40s

ÕýÈçÄã¿´µ½µÄ£¬×îºóÒ»´ÎµÄ¾«¶È¿ÉÒÔ´ïµ½0.98526£¬ÊÇÕâ10¸öµ¥ÔªÑµÁ·ÖеÄÒ»¸öÏ൱²»´íµÄÐÔÄÜ¡£

Ô¤²âºÍ»ìÏý¾ØÕó

ÏÖÔÚ£¬ÎÒÃÇʹÓÃÕâ¸öÄ£ÐÍÀ´Ô¤²âÕû¸ö²âÊÔ¼¯£º

preds = net1.predict(X_test)  

ÎÒÃÇ»¹¿ÉÒÔ»æÖÆÒ»¸ö»ìÏý¾ØÕóÀ´¼ì²éÉñ¾­ÍøÂçµÄ·ÖÀàÐÔÄÜ£º

cm = confusion_matrix(y_test, preds)  
plt.matshow(cm)
plt.title('Confusion matrix')
plt.colorbar()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()

ÉÏÃæµÄ´úÂ뽫»æÖÆÏÂÃæµÄ»ìÏý¾ØÕó£º


»ìÏý¾ØÕó

ÈçÄãËùÊÓ£¬¶Ô½ÇÏßÉϵķÖÀà¸üÃܼ¯£¬±íÃ÷ÎÒÃǵķÖÀàÆ÷ÓÐÒ»¸öÁ¼ºÃµÄÐÔÄÜ¡£

¹ýÂËÆ÷µÄ¿ÉÊÓ»¯

ÎÒÃÇ»¹¿ÉÒÔ´ÓµÚÒ»¸ö¾í»ý²ãÖпÉÊÓ»¯32¸ö¹ýÂËÆ÷£º

visualize.plot_conv_weights(net1.layers_['conv2d1'])  

ÉÏÃæµÄ´úÂ뽫»æÖÆÏÂÃæµÄ¹ýÂËÆ÷£º


µÚÒ»²ãµÄ5x5x32¹ýÂËÆ÷

ÈçÄãËùÊÓ£¬nolearnµÄplot_conv_weightsº¯ÊýÔÚÎÒÃÇÖ¸¶¨µÄ²ãÖлæÖƳöÁËËùÓеĹýÂËÆ÷¡£

Theano²ãµÄ¹¦ÄܺÍÌØÕ÷ÌáÈ¡

ÏÖÔÚ¿ÉÒÔ´´½¨theano±àÒëµÄº¯ÊýÁË£¬Ëü½«Ç°À¡ÊäÈëÊý¾ÝÊäË͵½½á¹¹ÌåϵÖУ¬ÉõÖÁÊÇÄã¸ÐÐËȤµÄijһ²ãÖС£½Ó×Å£¬ÎÒ»áµÃµ½Êä³ö²ãµÄº¯ÊýºÍÊä³ö²ãÇ°ÃæµÄ³íÃܲ㺯Êý¡£

dense_layer = layers.get_output(net1.layers_['dense'], deterministic=True)  
output_layer = layers.get_output(net1.layers_['output'], deterministic=True)
input_var = net1.layers_['input'].input_var
f_output = theano.function([input_var], output_layer)
f_dense = theano.function([input_var], dense_layer)

ÈçÄãËùÊÓ£¬ÎÒÃÇÏÖÔÚÓÐÁ½¸ötheanoº¯Êý£¬·Ö±ðÊÇf_outputºÍf_dense£¨ÓÃÓÚÊä³ö²ãºÍ³íÃܲ㣩¡£Çë×¢Ò⣬ÔÚÕâÀïΪÁ˵õ½ÕâЩ²ã£¬ÎÒÃÇʹÓÃÁËÒ»¸ö¶îÍâµÄ½Ð×ö¡°deterministic¡±µÄ²ÎÊý£¬ÕâÊÇΪÁ˱ÜÃâdropout²ãÓ°ÏìÎÒÃǵÄǰÀ¡²Ù×÷¡£

ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔ°ÑʵÀýת»»ÎªÊäÈë¸ñʽ£¬È»ºóÊäÈëµ½theanoº¯ÊýÊä³ö²ãÖУº

instance = X_test[0][None, :, :]  
%timeit -n 500 f_output(instance)
500 loops, best of 3: 858 ¦Ìs per loop

ÈçÄãËùÊÓ£¬f_outputº¯Êýƽ¾ùÐèÒª858¦Ìs¡£ÎÒÃÇͬÑù¿ÉÒÔΪÕâ¸öʵÀý»æÖÆÊä³ö²ã¼¤»îÖµ½á¹û£º

pred = f_output(instance)  
N = pred.shape[1]
plt.bar(range(N), pred.ravel())

ÉÏÃæµÄ´úÂ뽫»æÖƳöÏÂÃæµÄͼ£º


Êä³ö²ã¼¤»îÖµ

ÕýÈçÄãËù¿´µ½µÄ£¬Êý×Ö±»ÈÏΪÊÇ7¡£ÊÂʵÊÇΪÈκÎÍøÂç²ã´´½¨theanoº¯Êý¶¼ÊǷdz£ÓÐÓõģ¬ÒòΪÄã¿ÉÒÔ´´½¨Ò»¸öº¯Êý£¨ÏñÎÒÃÇÒÔǰһÑù£©µÃµ½³íÃܲ㣨Êä³ö²ãǰһ¸ö£©µÄ¼¤»îÖµ£¬È»ºóÄã¿ÉÒÔʹÓÃÕâЩ¼¤»îÖµ×÷ÎªÌØÕ÷£¬²¢ÇÒʹÓÃÄãµÄÉñ¾­ÍøÂç×÷ÎªÌØÕ÷ÌáÈ¡Æ÷¶ø²»ÊÇ·ÖÀàÆ÷¡£ÏÖÔÚ£¬ÈÃÎÒÃÇΪ³íÃÜ²ã»æÖÆ256¸ö¼¤»îµ¥Ôª£º

pred = f_dense(instance)  
N = pred.shape[1]
plt.bar(range(N), pred.ravel())

ÉÏÃæµÄ´úÂ뽫»æÖÆÏÂÃæµÄͼ£º


³íÃܲ㼤»îÖµ

ÏÖÔÚ£¬Äã¿ÉÒÔʹÓÃÊä³öµÄÕâ256¸ö¼¤»îÖµ×÷ΪÏßÐÔ·ÖÀàÆ÷ÈçLogistic»Ø¹é»òÖ§³ÖÏòÁ¿»úµÄÌØÕ÷ÁË¡£

×îºó£¬ÎÒÏ£ÍûÄã»áϲ»¶Õâ¸ö½Ì³Ì¡£

   
4102 ´Îä¯ÀÀ       28
 
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS