±à¼ÍƼö: |
±¾ÎÄÊ×ÏȽéÉÜKeras»ù´¡¡¢KerasµÄÄ£¿é½á¹¹¡¢Ê¹ÓÃKeras´î½¨Ò»¸öÉñ¾ÍøÂç¡¢Ö÷Òª¸ÅÄîµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
1.¹ØÓÚKeras
1£©¼ò½é
KerasÊÇÓÉ´¿python±àдµÄ»ùÓÚtheano/tensorflowµÄÉî¶Èѧϰ¿ò¼Ü¡£
KerasÊÇÒ»¸ö¸ß²ãÉñ¾ÍøÂçAPI£¬Ö§³Ö¿ìËÙʵÑ飬Äܹ»°ÑÄãµÄideaѸËÙת»»Îª½á¹û£¬Èç¹ûÓÐÈçÏÂÐèÇ󣬿ÉÒÔÓÅÏÈÑ¡ÔñKeras£º
a£©¼òÒ׺ͿìËÙµÄÔÐÍÉè¼Æ£¨keras¾ßÓи߶ÈÄ£¿é»¯£¬¼«¼ò£¬ºÍ¿ÉÀ©³äÌØÐÔ£©
b£©Ö§³ÖCNNºÍRNN£¬»ò¶þÕߵĽáºÏ
c£©ÎÞ·ìCPUºÍGPUÇл»
2£©Éè¼ÆÔÔò
a£©Óû§ÓѺãºKerasÊÇΪÈËÀà¶ø²»ÊÇÌì¶¥ÐÇÈËÉè¼ÆµÄAPI¡£Óû§µÄʹÓÃÌåÑéʼÖÕÊÇÎÒÃÇ¿¼ÂǵÄÊ×ÒªºÍÖÐÐÄÄÚÈÝ¡£Keras×ñѼõÉÙÈÏÖªÀ§ÄѵÄ×î¼Ñʵ¼ù£ºKerasÌṩһÖ¶ø¼ò½àµÄAPI£¬
Äܹ»¼«´ó¼õÉÙÒ»°ãÓ¦ÓÃÏÂÓû§µÄ¹¤×÷Á¿£¬Í¬Ê±£¬KerasÌṩÇåÎúºÍ¾ßÓÐʵ¼ùÒâÒåµÄbug·´À¡¡£
b£©Ä£¿éÐÔ£ºÄ£ÐÍ¿ÉÀí½âΪһ¸ö²ãµÄÐòÁлòÊý¾ÝµÄÔËËãͼ£¬ÍêÈ«¿ÉÅäÖõÄÄ£¿é¿ÉÒÔÓÃ×îÉٵĴú¼Û×ÔÓÉ×éºÏÔÚÒ»Æð¡£¾ßÌå¶øÑÔ£¬ÍøÂç²ã¡¢Ëðʧº¯Êý¡¢ÓÅ»¯Æ÷¡¢³õʼ»¯²ßÂÔ¡¢¼¤»îº¯Êý¡¢ÕýÔò»¯·½·¨¶¼ÊǶÀÁ¢µÄÄ£¿é£¬Äã¿ÉÒÔʹÓÃËüÃÇÀ´¹¹½¨×Ô¼ºµÄÄ£ÐÍ¡£
c£©Ò×À©Õ¹ÐÔ£ºÌí¼ÓÐÂÄ£¿é³¬¼¶ÈÝÒ×£¬Ö»ÐèÒª·ÂÕÕÏÖÓеÄÄ£¿é±àдеÄÀà»òº¯Êý¼´¿É¡£´´½¨ÐÂÄ£¿éµÄ±ãÀûÐÔʹµÃKeras¸üÊʺÏÓÚÏȽøµÄÑо¿¹¤×÷¡£
d£©ÓëPythonÐ×÷£ºKerasûÓе¥¶ÀµÄÄ£ÐÍÅäÖÃÎļþÀàÐÍ£¨×÷Ϊ¶Ô±È£¬caffeÓУ©£¬Ä£ÐÍÓÉpython´úÂëÃèÊö£¬Ê¹Æä¸ü½ô´ÕºÍ¸üÒ×debug£¬²¢ÌṩÁËÀ©Õ¹µÄ±ãÀûÐÔ¡£
2.KerasµÄÄ£¿é½á¹¹

3.ʹÓÃKeras´î½¨Ò»¸öÉñ¾ÍøÂç

4.Ö÷Òª¸ÅÄî
1£©·ûºÅ¼ÆËã
KerasµÄµ×²ã¿âʹÓÃTheano»òTensorFlow£¬ÕâÁ½¸ö¿âÒ²³ÆÎªKerasµÄºó¶Ë¡£ÎÞÂÛÊÇTheano»¹ÊÇTensorFlow£¬¶¼ÊÇÒ»¸ö¡°·ûºÅʽ¡±µÄ¿â¡£·ûºÅ¼ÆËãÊ×Ïȶ¨Òå¸÷ÖÖ±äÁ¿£¬È»ºó½¨Á¢Ò»¸ö¡°¼ÆËãͼ¡±,¼ÆËãͼ¹æ¶¨Á˸÷¸ö±äÁ¿Ö®¼äµÄ¼ÆËã¹ØÏµ¡£
·ûºÅ¼ÆËãÒ²½ÐÊý¾ÝÁ÷ͼ£¬Æä¹ý³ÌÈçÏÂ(gifͼ²»ºÃ´ò¿ª£¬ËùÒÔÓÃÁ˾²Ì¬Í¼£¬Êý¾ÝÊǰ´Í¼ÖкÚÉ«´ø¼ýÍ·µÄÏßÁ÷¶¯µÄ)£º

2£©ÕÅÁ¿
ÕÅÁ¿(tensor)£¬¿ÉÒÔ¿´×÷ÊÇÏòÁ¿¡¢¾ØÕóµÄ×ÔÈ»ÍÆ¹ã£¬ÓÃÀ´±íʾ¹ã·ºµÄÊý¾ÝÀàÐÍ¡£ÕÅÁ¿µÄ½×ÊýÒ²½Ðά¶È¡£
0½×ÕÅÁ¿,¼´±êÁ¿,ÊÇÒ»¸öÊý¡£
1½×ÕÅÁ¿,¼´ÏòÁ¿,Ò»×éÓÐÐòÅÅÁеÄÊý
2½×ÕÅÁ¿,¼´¾ØÕó,Ò»×éÏòÁ¿ÓÐÐòµÄÅÅÁÐÆðÀ´
3½×ÕÅÁ¿£¬¼´Á¢·½Ì壬һ×龨ÕóÉÏÏÂÅÅÁÐÆðÀ´
4½×ÕÅÁ¿......
ÒÀ´ÎÀàÍÆ
ÖØµã£º¹ØÓÚά¶ÈµÄÀí½â
¼ÙÈçÓÐÒ»¸ö10³¤¶ÈµÄÁÐ±í£¬ÄÇôÎÒÃǺáÏò¿´ÓÐ10¸öÊý×Ö£¬Ò²¿ÉÒÔ½Ð×ö10ά¶È£¬×ÝÏò¿´Ö»ÄÜ¿´µ½1¸öÊý×Ö£¬ÄÇô¾Í½Ð1ά¶È¡£×¢ÒâÕâ¸öÇø±ðÓÐÖúÓÚÀí½âKeras»òÕßÉñ¾ÍøÂçÖмÆËãʱ³öÏÖµÄά¶ÈÎÊÌâ¡£
3£©Êý¾Ý¸ñʽ(data_format)
ĿǰÖ÷ÒªÓÐÁ½ÖÖ·½Ê½À´±íʾÕÅÁ¿£º
a) thģʽ»òchannels_firstģʽ£¬TheanoºÍcaffeʹÓôËģʽ¡£
b£©tfģʽ»òchannels_lastģʽ£¬TensorFlowʹÓôËģʽ¡£
ÏÂÃæ¾ÙÀý˵Ã÷Á½ÖÖģʽµÄÇø±ð£º
¶ÔÓÚ100ÕÅRGB3ͨµÀµÄ16¡Á32£¨¸ßΪ16¿íΪ32£©²Êɫͼ£¬
th±íʾ·½Ê½£º£¨100,3,16,32£©
tf±íʾ·½Ê½£º£¨100,16,32,3£©
ΨһµÄÇø±ð¾ÍÊDZíʾͨµÀ¸öÊý3µÄλÖò»Ò»Ñù¡£
4£©Ä£ÐÍ
KerasÓÐÁ½ÖÖÀàÐ͵ÄÄ£ÐÍ£¬Ðò¹áÄ£ÐÍ£¨Sequential£©ºÍº¯ÊýʽģÐÍ£¨Model£©£¬º¯ÊýʽģÐÍÓ¦ÓøüΪ¹ã·º£¬Ðò¹áÄ£ÐÍÊǺ¯ÊýʽģÐ͵ÄÒ»ÖÖÌØÊâÇé¿ö¡£
a£©Ðò¹áÄ£ÐÍ£¨Sequential):µ¥ÊäÈëµ¥Êä³ö£¬Ò»Ìõ·ͨµ½µ×£¬²ãÓë²ãÖ®¼äÖ»ÓÐÏàÁÚ¹ØÏµ£¬Ã»Óпç²ãÁ¬½Ó¡£ÕâÖÖÄ£ÐͱàÒëËٶȿ죬²Ù×÷Ò²±È½Ï¼òµ¥
b£©º¯ÊýʽģÐÍ£¨Model£©£º¶àÊäÈë¶àÊä³ö£¬²ãÓë²ãÖ®¼äÈÎÒâÁ¬½Ó¡£ÕâÖÖÄ£ÐͱàÒëËÙ¶ÈÂý¡£
5.µÚÒ»¸öʾÀý
ÕâÀïÒ²²ÉÓýéÉÜÉñ¾ÍøÂçʱ³£ÓõÄÒ»¸öÀý×Ó£ºÊÖдÊý×ÖµÄʶ±ð¡£
ÔÚд´úÂë֮ǰ£¬»ùÓÚÕâ¸öÀý×Ó½éÉÜһЩ¸ÅÄ·½±ã´ó¼ÒÀí½â¡£
PS£º¿ÉÄÜÊǰ汾²îÒìµÄÎÊÌ⣬¹ÙÍøÖеIJÎÊýºÍʾÀýÖеIJÎÊýÊDz»Ò»ÑùµÄ£¬¹ÙÍøÖиø³öµÄ²ÎÊýÉÙ£¬²¢ÇÒÓÐЩ²ÎÊýÖ§³Ö£¬ÓÐЩ²»Ö§³Ö¡£ËùÒÔ´ËÀý×ÓÈ¥µôÁ˲»Ö§³ÖµÄ²ÎÊý£¬²¢ÇÒÖ»½éÉܱ¾ÀýÖÐÓõ½µÄ²ÎÊý¡£
1£©Dense(500,input_shape=(784,))
a£©Dense²ãÊôÓÚÍøÂç²ã-->³£ÓòãÖеÄÒ»¸ö²ã
b£© 500±íʾÊä³öµÄά¶È£¬ÍêÕûµÄÊä³ö±íʾ£º(*,500)£º¼´Êä³öÈÎÒâ¸ö500άµÄÊý¾ÝÁ÷¡£µ«ÊÇÔÚ²ÎÊýÖÐֻдά¶È¾Í¿ÉÒÔÁË£¬±È½Ï¾ßÌåÊä³ö¶àÉÙ¸öÊÇÓÐÊäÈëÈ·¶¨µÄ¡£»»¸ö˵·¨£¬DenseµÄÊä³öÆäʵÊǸöN¡Á500µÄ¾ØÕó¡£
c£©input_shape(784,) ±íʾÊäÈëά¶ÈÊÇ784(28¡Á28£¬ºóÃæ¾ßÌå½éÉÜΪʲô)£¬ÍêÕûµÄÊäÈë±íʾ£º(*,784)£º¼´ÊäÈëN¸ö784ά¶ÈµÄÊý¾Ý
2£©Activation('tanh')
a£©Activation£º¼¤»î²ã
b£©'tanh' £º¼¤»îº¯Êý
3£©Dropout(0.5)
ÔÚѵÁ·¹ý³ÌÖÐÿ´Î¸üвÎÊýÊ±Ëæ»ú¶Ï¿ªÒ»¶¨°Ù·Ö±È£¨rate£©µÄÊäÈëÉñ¾Ôª£¬·ÀÖ¹¹ýÄâºÏ¡£
4£©Êý¾Ý¼¯
Êý¾Ý¼¯°üÀ¨60000ÕÅ28¡Á28µÄѵÁ·¼¯ºÍ10000ÕÅ28¡Á28µÄ²âÊÔ¼¯¼°Æä¶ÔÓ¦µÄÄ¿±êÊý×Ö¡£Èç¹ûÍêÈ«°´ÕÕÉÏÊöÊý¾Ý¸ñʽ±íÊö£¬ÒÔtensorflow×÷Ϊºó¶ËÓ¦¸ÃÊÇ£¨60000,28,28,3£©£¬ÒòΪʾÀýÖвÉÓÃÁËmnist.load_data()»ñÈ¡Êý¾Ý¼¯£¬ËùÒÔÒѾÅжÏʹÓÃÁËtensorflow×÷Ϊºó¶Ë£¬Òò´ËÊý¾Ý¼¯¾Í±ä³ÉÁË(60000,28,28),ÄÇôinput_shape(784,)Ó¦¸ÃÊÇinput_shape(28,28£¬)²Å¶Ô£¬µ«ÊÇÔÚÕâ¸öʾÀýÖÐÕâôдÊDz»¶ÔµÄ£¬ÐèҪת»»³É(60000,784),²Å¿ÉÒÔ¡£ÎªÊ²Ã´ÐèҪת»»ÄØ£¿

ÈçÉÏͼ£¬ÑµÁ·¼¯(60000,28,28)×÷ΪÊäÈ룬¾ÍÏ൱ÓÚÒ»¸öÁ¢·½Ì壬¶øÊäÈë²ã´Óµ±Ç°½Ç¶È¿´¾ÍÊÇÒ»¸öÆ½Ãæ£¬Á¢·½ÌåµÄÊý¾ÝÁ÷Ôõô½øÈëÆ½ÃæµÄÊäÈë²ã½øÐмÆËãÄØ£¿ËùÒÔÐèÒª½øÐлÆÉ«¼ýÍ·ËùʾµÄ±ä»»£¬È»ºó²Å½øÈëÊäÈë²ã½øÐкóÐø¼ÆËã¡£ÖÁÓÚ´Ó28*28±ä»»³É784Ö®ºóÊäÈë²ãÈçºÎ´¦Àí£¬¾Í²»ÐèÒªÎÒÃǹØÐÄÁË¡£(ϲ»¶×êÑеÄͬѧ¿ÉÒÔÈ¥Ñо¿ÏÂÔ´´úÂë)¡£
²¢ÇÒ£¬KerasÖÐÊäÈë¶àΪ(nb_samples, input_dim)µÄÐÎʽ£º¼´(Ñù±¾ÊýÁ¿£¬ÊäÈëά¶È)¡£
5£©Ê¾Àý´úÂë
from keras.models
import Sequential
from keras.layers.core import Dense, Dropout,
Activation
from keras.optimizers import SGD
from keras.datasets import mnist
import numpy
'''
µÚÒ»²½£ºÑ¡ÔñÄ£ÐÍ
'''
model = Sequential()
'''
µÚ¶þ²½£º¹¹½¨ÍøÂç²ã
'''
model.add(Dense(500,input_shape=(784,))) # ÊäÈë²ã£¬28*28=784
model.add(Activation('tanh')) # ¼¤»îº¯ÊýÊÇtanh
model.add(Dropout(0.5)) # ²ÉÓÃ50%µÄdropout
model.add(Dense(500)) # Òþ²Ø²ã½Úµã500¸ö
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(10)) # Êä³ö½á¹ûÊÇ10¸öÀà±ð£¬ËùÒÔά¶ÈÊÇ10
model.add(Activation('softmax')) # ×îºóÒ»²ãÓÃsoftmax×÷Ϊ¼¤»îº¯Êý
'''
µÚÈý²½£º±àÒë
'''
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9,
nesterov=True) # ÓÅ»¯º¯Êý£¬É趨ѧϰÂÊ£¨lr£©µÈ²ÎÊý
model.compile(loss='categorical_crossentropy',
optimizer=sgd, class_mode='categorical') # ʹÓý»²æìØ×÷Ϊlossº¯Êý
'''
µÚËIJ½£ºÑµÁ·
.fitµÄһЩ²ÎÊý
batch_size£º¶Ô×ܵÄÑù±¾Êý½øÐзÖ×飬ÿ×é°üº¬µÄÑù±¾ÊýÁ¿
epochs £ºÑµÁ·´ÎÊý
shuffle£ºÊÇ·ñ°ÑÊý¾ÝËæ»ú´òÂÒÖ®ºóÔÙ½øÐÐѵÁ·
validation_split£ºÄóö°Ù·ÖÖ®¶àÉÙÓÃÀ´×ö½»²æÑéÖ¤
verbose£ºÆÁÏÔģʽ 0£º²»Êä³ö 1£ºÊä³ö½ø¶È 2£ºÊä³öÿ´ÎµÄѵÁ·½á¹û
'''
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# ʹÓÃKeras×Ô´øµÄmnist¹¤¾ß¶ÁÈ¡Êý¾Ý£¨µÚÒ»´ÎÐèÒªÁªÍø£©
# ÓÉÓÚmistµÄÊäÈëÊý¾Ýά¶ÈÊÇ(num, 28, 28)£¬ÕâÀïÐèÒª°ÑºóÃæµÄά¶ÈÖ±½ÓÆ´ÆðÀ´±ä³É784ά
X_train = X_train.reshape(X_train.shape[0],
X_train.shape[1] * X_train.shape[2])
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1]
* X_test.shape[2])
Y_train = (numpy.arange(10) == y_train[:, None]).astype(int)
Y_test = (numpy.arange(10) == y_test[:, None]).astype(int)
model.fit(X_train,Y_train, batch_size=200,
epochs=50, shuffle=True, verbose=0, validation_split=0.3)
model.evaluate(X_test, Y_test, batch_size=200,
verbose=0)
'''
µÚÎå²½£ºÊä³ö
'''
print("test set")
scores = model.evaluate(X_test,Y_test,batch_size=200,verbose=0)
print("")
print("The test loss is %f" % scores)
result = model.predict(X_test,batch_size=200,verbose=0)
result_max = numpy.argmax(result, axis = 1)
test_max = numpy.argmax(Y_test, axis = 1)
result_bool = numpy.equal(result_max, test_max)
true_num = numpy.sum(result_bool)
print("")
print("The accuracy of the model is %f"
% (true_num/len(result_bool))) |
|