±à¼ÍƼö: |
ÎÄÕ½éÉÜÁËʵÏÖÒ»¸ö¼òµ¥µÄÈý²ãÉñ¾ÍøÂçÒÔ¼°ÓÅ»¯Ëã·¨£¨±ÈÈçÌݶÈϽµ·¨£©µÄ¹¤×÷ÔÀí£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃǽ«½éÉÜΪʲôҪ´ÓÍ·¿ªÊ¼ÊµÏÖÉñ¾ÍøÂçÄØ£¿¼´Ê¹Äã´òËãÒÔºóʹÓÃPyBrainÕâÑùµÄÉñ¾ÍøÂç¿â£¬ÖÁÉÙÒ»´Î´ÓÍ·¿ªÊ¼ÊµÏÖÒ»¸öÉñ¾ÍøÂçÒ²ÊÇÒ»¸ö¼«¾ß¼ÛÖµµÄÁ·Ï°£¬Õâ»á°ïÖúÄãÀí½âÉñ¾ÍøÂçÊÇÔõô¹¤×÷µÄ£¬²¢ÇÒÈç¹ûÄãÏëÒªÉè¼Æ³ö¸ßЧµÄÉñ¾ÍøÂçÄ£ÐÍ£¬×öÒ»¸öÕâÑùµÄÁ·Ï°Ò²ÊǺÜÓбØÒªµÄ¡£
ÐèҪעÒâµÄÒ»¼þÊÂÇéÊÇ£¬±¾ÆªÎÄÕµÄʾÀý´úÂëЧÂʲ¢²»¸ß£¬ËüµÄÄ¿µÄÊÇÒ×ÓÚ±»ÈËÀí½â¡£
Éú³ÉÊý¾Ý¼¯
Ê×ÏÈÎÒÃÇÉú³ÉÒ»¸ö¿ÉÒÔ²Ù×÷µÄÊý¾Ý¼¯£¬ÐÒÔ˵ÄÊÇ£¬scikit-learnÌṩÁËһЩÓÐÓõÄÊý¾Ý¼¯Éú³ÉÆ÷£¬ËùÒÔÎÒÃDz»ÐèÒª×Ô¼ºÐ´´úÂëÀ´Éú³ÉÊý¾Ý¼¯£¬Ö»ÐèʹÓÃmake_moonsÕâ¸öº¯Êý¾Í¿ÉÒÔ¡£
# Éú³ÉÊý¾Ý¼¯²¢»æÖƳöÀ´
np.random.seed(0)
X, y = sklearn.datasets.make_moons(200, noise=0.20)
plt.scatter(X[:,0], X[:,1], s=40, c=y, cmap=plt.cm.Spectral) |

ÔÂÑÀÐÎ×´µÄ¡¢ÓÐÁ½ÀàÊý¾ÝµÄÊý¾Ý¼¯
ÎÒÃÇÉú³ÉµÄÊý¾Ý¼¯ÖÐÓÐÁ½ÖÖÀàÐ͵ÄÊý¾Ý£¬·Ö±ðÓúìµãºÍÀ¶µã±êʶÁ˳öÀ´¡£Äã¿ÉÒÔ½«À¶µãÊÓΪÄÐÐÔ»¼Õߣ¬½«ºìµãÊÓΪŮÐÔ»¼Õߣ¬²¢ÇÒ½«xÖáºÍyÖáÊÓΪҽÁÆ·½Ê½¡£
ÎÒÃǵÄÄ¿±êÊÇѵÁ·Ò»¸ö»úÆ÷ѧϰ·ÖÀàÆ÷£¬ÈÃËüÔÚx¡¢y×ø±êϵÏÂÔ¤²âÕýÈ·µÄÀà±ð£¨ÄÐÐÔ»òÕßÅ®ÐÔ£©¡£ÐèҪעÒâµÄÊÇÕâЩÊý¾Ý²»Äܱ»ÏßÐԷָÎÒÃÇÎÞ·¨»³öÒ»ÌõÖ±Ïß½«ÕâÁ½ÖÖÀàÐ͵ÄÊý¾Ý·Ö¿ª£¬ÕâÒâζ×ÅÏßÐÔ·ÖÀàÆ÷£¨±ÈÈçLogistic»Ø¹é£©½«ÎÞ·¨ÄâºÏÕâЩÊý¾Ý£¬³ý·ÇÄãÊÖ¹¤Éè¼ÆµÄ·ÇÏßÐÔÌØÕ÷£¨Èç¶àÏîʽ£©£¬Îª¸ø¶¨µÄÊý¾Ý¼¯¹¤×÷Á¼ºÃ¡£
ÊÂʵÉÏ£¬Õâ¾ÍÊÇÉñ¾ÍøÂçÖ÷ÒªµÄÓŵãÖ®Ò»£¬Äã²»±Øµ£ÐÄÌØÕ÷¹¤³Ì£¬Éñ¾ÍøÂçµÄÒþ²Ø²ã½«»áΪÄãÑ§Ï°ÌØÕ÷¡£
Logistic»Ø¹é
ΪÁËÖ¤Ã÷ÕâÒ»µã£¬ÈÃÎÒÃÇѵÁ·Ò»¸öLogistic»Ø¹é·ÖÀàÆ÷¡£Õâ¸ö·ÖÀàÆ÷µÄÊäÈëÊÇ×ø±êx¡¢y£¬ËüµÄÊä³öÊÇÔ¤²âµÄÊý¾ÝÀàÐÍ£¨0»ò1£©¡£ÎªÁË·½±ã£¬ÎÒÃÇʹÓÃscikit-learnÖеÄLogistic
RegressionÀà¡£
# Train the logistic
rgeression classifier
clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X, y)
# Plot the decision boundary
plot_decision_boundary(lambda x: clf.predict(x))
plt.title("Logistic Regression") |

ÉÏͼÏÔʾÁËLogistic»Ø¹é·ÖÀàÆ÷ѧϰµÄ¾ö²ß±ß½ç£¬ËüÓÃÖ±Ïß¾¡¿ÉÄܵذÑÊý¾Ý·Ö¿ªÁË£¬µ«ÊDz¢Ã»Óв¶»ñÊý¾ÝµÄÔÂÑÀÐÎ×´¡£
ѵÁ·Ò»¸öÉñ¾ÍøÂç
ÏÖÔÚÈÃÎÒÃǴһ¸ö3²ãµÄÉñ¾ÍøÂ磬ÆäÖаüº¬1¸öÊäÈë²ã£¬1¸öÒþ²Ø²ãÒÔ¼°1¸öÊä³ö²ã¡£Êä³ö²ãµÄ½ÚµãÊýÈ¡¾öÓÚÎÒÃǵÄÊý¾ÝµÄά¶È£¬Ò²¾ÍÊÇ2£»ÀàËÆµØ£¬Êä³ö²ãµÄ½ÚµãÊýÈ¡¾öÓÚÎÒÃÇÓжàÉÙÀàÊý¾Ý£¬ÕâÀïÒ²ÊÇ2£¨ÒòΪÎÒÃÇÖ»ÓÐÁ½ÀàÊý¾Ý£¬ËùÒÔʵ¼ÊÉÏ¿ÉÒÔÖ»ÓÐÒ»¸öÊä³ö½Úµã£¬Êä³ö0»ò1£¬µ«ÊÇÓÐÁ½¸öÊä³ö½Úµã»áʹµÃÒÔºóÓжàÀàÊý¾ÝµÄʱºòÉñ¾ÍøÂç¸üÈÝÒ×À©Õ¹£©¡£Éñ¾ÍøÂçµÄÊäÈëÊÇx¡¢y×ø±ê£¬¶øÊä³öÊÇÁ½¸ö¸ÅÂÊ£¬Ò»¸öÊÇÀàÐÍΪ0£¨Å®ÐÔ»¼Õߣ©µÄ¸ÅÂÊ£¬ÁíÒ»¸öÊÇÀàÐÍΪ1£¨ÄÐÐÔ»¼Õߣ©µÄ¸ÅÂÊ¡£Õâ¸öÉñ¾ÍøÂç¿´ÆðÀ´¾ÍÏñÏÂÃæÕâÑù£º

ÎÒÃÇ¿ÉÒÔ×Ô¼ºÑ¡ÔñÒþ²Ø²ãµÄά¶È£¨½ÚµãÊýÁ¿£©£¬Òþ²Ø²ã½ÚµãµÄÊýÁ¿Ô½¶à£¬ÎÒÃÇÄܹ»ÊÊÓ¦µÄ¹¦ÄܾÍÔ½¸´ÔÓ¡£µ«ÊǸßά¶È×ÜÊǰéËæ×Ÿ߳ɱ¾¡£Èç¹û½ÚµãÊýÁ¿ºÜ¶à£¬Ê×ÏÈ£¬ÎªÁËÔ¤²â½á¹ûÒÔ¼°Ñ§Ï°Éñ¾ÍøÂç²ÎÊý£¬¾ÍÐèÒª½øÐдóÁ¿µÄ¼ÆË㣻Æä´Î£¬¸ü¶àµÄ²ÎÊýÊýÁ¿£¨ÒëÕß×¢£ºÒþ²Ø²ãµÄ²ÎÊýÁ¿ÊÇÓɸòã½ÚµãÊýºÍǰһ²ãµÄ½ÚµãÊý¾ö¶¨µÄ£©ÒâζןüÈÝÒ×Ôì³É¶ÔÊý¾ÝµÄ¹ý¶ÈÄâºÏ¡£
ÄÇô¸ÃÈçºÎÑ¡ÔñÒþ²Ø²ãµÄ½ÚµãÊýÄØ£¿¾¡¹ÜÓÐһЩͨÓÃÖ¸ÄϺͽ¨Ò飬µ«ÊÇÒþ²Ø²ãµÄ½ÚµãÊýͨ³£È¡¾öÓÚÄãÒª½â¾öµÄÌØ¶¨µÄÎÊÌ⣬ÓëÆä˵½ÚµãÊýµÄÑ¡ÔñÊÇÒ»ÃÅ¿ÆÑ§£¬²»Èç˵ËüÊÇÒ»ÃÅÒÕÊõ¡£ÎÒÃÇÉÔºó»á̽¾¿Òþ²Ø²ã½ÚµãµÄÊýÁ¿ÎÊÌ⣬²¢¹Û²ìËüÊÇÈçºÎÓ°ÏìÉñ¾ÍøÂçµÄÊä³öµÄ¡£
ÎÒÃÇ»¹ÐèҪΪÒþ²Ø²ãÑ¡ÔñÒ»¸ö¼¤»îº¯Êý£¬¼¤»îº¯ÊýÓÃÀ´½«¸Ã²ãµÄÊäÈëת»»³ÉÊä³ö¡£·ÇÏßÐÔ¼¤»îº¯ÊýÄܹ»Ê¹ÎÒÃÇÄâºÏ·ÇÏßÐÔÊý¾Ý¡£³£Óõļ¤»îº¯ÊýÓÐtanh¡¢sigmoidÒÔ¼°RELUs£¬ÔÚÕâÀïÎÒÃÇʹÓÃtanh£¬ÒòΪËüÔںܶೡ¾°Öж¼±íÏֵúܺá£ÕâЩº¯Êý¶¼ÓÐÒ»¸öºÜ°ôµÄÌØÐÔ£¬ÄǾÍÊÇËüÃǵĵ¼Êý¶¼ÄÜÓÃËüÃDZ¾Éí±íʾ£¬±ÈÈ磬tanh(x)µÄµ¼ÊýÊÇ1?tanh2(x)1?tanh
2(x)£¬Õâ·Ç³£ÓÐÓã¬ÒòΪÎÒÃÇÖ»Òª¼ÆËãtanh(x)µÄÖµÒ»´Î£¬¾Í¿ÉÒÔÔÚ¶Ôtanh(x)Çóµ¼µÄʱºòÖØ¸´Ê¹ÓÃËü¡£
ÒòΪÎÒÃÇÏëÒªÈÃÉñ¾ÍøÂçÊä³ö¸ÅÂÊ£¬ËùÒÔÊä³ö²ãµÄ¼¤»îº¯ÊýÎÒÃÇʹÓÃsoftmax£¬Ëü¿ÉÒÔ¼òµ¥µØ°ÑÔʼÊýֵת»»³É¸ÅÂÊ¡£Èç¹ûÄã¶ÔÂß¼º¯ÊýºÜÊìϤ£¬ÄÇôÄã¿ÉÒÔ½«softmax¿´×÷ÊÇÂß¼º¯ÊýÔÚ¶àÀàÐÍÖеÄÒ»°ã»¯Ó¦Óá£
Éñ¾ÍøÂçÈçºÎ×ö³öÔ¤²â
ÎÒÃǵÄÉñ¾ÍøÂçÀûÓÃÕýÏò´«²¥À´×ö³öÔ¤²â£¬ËùνÕýÏò´«²¥£¬¾ÍÊÇÖ¸Ò»×龨ÕóµÄÏà³ËÒÔ¼°ÎÒÃÇ֮ǰÌáµ½µÄ¼¤»îº¯ÊýµÄÓ¦Ó᣼ÙÉèxÊǶÔÉñ¾ÍøÂçµÄ¶þάÊäÈ룬ÄÇôÎÒÃǰ´ÕÕÈçϲ½Öè¼ÆËãÎÒÃǵÄÔ¤²â½á¹û$
\hat{y}$£¨Î¬¶ÈÒ²ÊÇ2£©£º 
ѧϰ²ÎÊý
ΪÉñ¾ÍøÂçѧϰ²ÎÊýÒâζ×ÅÔÚѵÁ·Êý¾ÝÉÏѰÕÒ×î¼Ñ²ÎÊý(W1,b1,W2,b2£¬ÒԴ˴ﵽʹ´íÎó×îС»¯µÄÄ¿µÄ¡£µ«ÊÇÎÒÃÇÓ¦¸ÃÈçºÎ¶¨Òå¡°´íÎó¡±ÄØ£¿ÎÒÃǽ«ºâÁ¿´íÎóµÄº¯Êý³ÆÎªËðʧº¯Êý£¨loss
function£©¡£¶ÔÓÚsoftmaxÊä³öÀ´Ëµ£¬Ò»¸ö³£ÓõÄÑ¡ÔñÊÇ·ÖÀཻ²æìØËðʧ£¨categorical
cross-entropy loss£¬ÓÖ³ÆÎª¸º¶ÔÊýËÆÈ» negative log likelihood£©¡£Èç¹ûÎÒÃÇÓÐN¸öѵÁ·Ñù±¾£¬ÒÔ¼°C¸öÊä³öÀà±ð£¬ÄÇôÎÒÃǵÄÔ¤²â½á¹û$
\hat{y}Ïà¶ÔÓÚÕæÖµ±êÇ©Ïà¶ÔÓÚÕæÖµ±êÇ© y$µÄËðʧÊÇÕâÑù¶¨ÒåµÄ£º

Õâ¸ö¹«Ê½¿´ÆðÀ´¸´ÔÓ£¬ÆäʵËü×öµÄÊÂÇé¾ÍÊÇ×ܽáѵÁ·Ñù±¾£¬Èç¹ûÔ¤²â´íÁËÀàÐÍ£¬¾ÍÔö¼ÓËðʧ£¨ÒëÕß×¢£º´ÖÌ岿·ÖµÄÔÎÄÈçÏ£ºsum
over our training examples and add to the loss if
we predicted the incorrect class. ÎÒ²»È·¶¨´ÖÌ岿·ÖÕâÑù·ÒëÊÇ·ñºÏÊÊ£¬Èç¹ûÓÐÍøÓÑÓиüºÃµÄ·Òë»¶ÓÖ¸Õý£©¡£yy£¨ÕýÈ·µÄ±êÇ©£©ºÍy£¨ÎÒÃǵÄÔ¤²âÖµ£©µÄÊýÖµÏà²îÔ½´ó£¬ÎÒÃǵÄËðʧ¾ÍÔ½´ó¡£Í¨¹ýѰÕÒʹËðʧ×îС»¯µÄ²ÎÊý£¬ÎÒÃÇ¿ÉÒÔ×î´óÏ޶ȵØÌá¸ßѵÁ·Êý¾ÝµÄËÆÈ»¡£
ÎÒÃÇ¿ÉÒÔÓÃÌݶÈϽµ·¨À´Ñ°ÕÒËðʧº¯ÊýµÄ×îСֵ¡£ÎÒ»áÓù̶¨µÄѧϰÂÊʵÏÖÒ»¸ö×îÆÕͨ°æ±¾µÄÌݶÈϽµ·¨£¬Ò²³ÆÎªÅúÁ¿ÌݶÈϽµ·¨£¬ËüµÄ±ä»¯°æ±¾±ÈÈçËæ»úÌݶÈϽµ·¨ºÍСÅúÁ¿ÌݶÈϽµ·¨ÔÚʵ¼ùÖÐͨ³£±íÏֵøüºÃ£¬ËùÒÔÈç¹ûÄã¶Ô´ËÒªÇóÑϸñ£¬ÄÇôÄãÒ»¶¨»áÏëҪʹÓÃËüÃÇ£¬×îºÃËæ×Åʱ¼äµÄÍÆÒÆÔÙÅäºÏÒÔѧϰÂÊË¥¼õ¡£
×÷ΪÊäÈ룬ÌݶÈϽµ·¨ÐèÒª¼ÆËãËðʧº¯Êý¶ÔÓÚ²ÎÊýµÄÌݶȣ¨µ¼ÊýÏòÁ¿£©ÎÒÃÇÀûÓÃÖøÃûµÄ·´Ïò´«²¥Ëã·¨À´¼ÆËãÕâЩÌݶȣ¬´ÓÊä³ö¿ªÊ¼Ó÷´Ïò´«²¥¼ÆËãÌݶȻáºÜ¸ßЧ¡£¶ÔÓÚ·´Ïò´«²¥µÄ¹¤×÷ÔÀí£¬ÎÒ²»»áÉîÈë½²½âÆäϸ½Ú£¬µ«ÊÇÍøÉÏÓкܶà³öÉ«µÄ½âÊÍ£¨ÕâÀï»òÕßÕâÀ¡£
ÏÂÃæµÄ¹«Ê½»á°ïÖúÎÒÃÇÓ¦Ó÷´Ïò´«²¥£¨ÕâÀïÇëÏàÐÅÎÒ£©£º

ʵÏÖ
ÏÖÔÚÎÒÃÇÒѾ׼±¸ºÃʵÏÖÒ»¸öÉñ¾ÍøÂçÁË£¬ÎÒÃÇΪÌݶÈϽµ¶¨ÒåһЩ±äÁ¿ºÍ²ÎÊý£º
num_examples
= len(X) # ѵÁ·Ñù±¾µÄÊýÁ¿
nn_input_dim = 2 # ÊäÈë²ãµÄά¶È
nn_output_dim = 2 # Êä³ö²ãµÄά¶È
# ÌݶÈϽµµÄ²ÎÊý£¨ÎÒÖ±½ÓÊÖ¶¯¸³Öµ£©
epsilon = 0.01 # ÌݶÈϽµµÄѧϰÂÊ
reg_lambda = 0.01 # ÕýÔò»¯µÄÇ¿¶È |
Ê×ÏÈÎÒÃÇʵÏÖ֮ǰ¶¨ÒåµÄËðʧº¯Êý£¬ÎÒÃÇÓÃÕâ¸öËðʧº¯ÊýÀ´ºâÁ¿Ä£Ð͵Ť×÷³É¹ûÊÇ·ñÁîÈËÂúÒâ¡£
#°ïÖúÎÒÃÇÔÚÊý¾Ý¼¯ÉϹÀËã×ÜÌåËðʧµÄº¯Êý
def calculate_loss(model):
W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'],
model['b2']
#ÕýÏò´«²¥£¬¼ÆËãÔ¤²âÖµ
z1 = X.dot(W1) + b1
a1 = np.tanh(z1)
z2 = a1.dot(W2) + b2
exp_scores = np.exp(z2)
probs = exp_scores / np.sum(exp_scores, axis=1,
keepdims=True)
# ¼ÆËãËðʧ
corect_logprobs = -np.log(probs[range(num_examples),
y])
data_loss = np.sum(corect_logprobs)
#ÔÚËðʧÉϼÓÉÏÕýÔòÏ¿ÉÑ¡£©
data_loss += reg_lambda/2 * (np.sum(np.square(W1))
+ np.sum(np.square(W2)))
return 1./num_examples * data_loss |
ÎÒÃÇ»¹ÊµÏÖÁËÒ»¸öº¯ÊýÓÃÀ´°ïÖúÎÒÃǼÆËãÉñ¾ÍøÂçµÄÊä³ö£¬¾ÍÏñÎÒÃÇ֮ǰ¶¨ÒåµÄÄÇÑù£¬ÔÚº¯ÊýÄÚ²¿½øÐÐÕýÏò´«²¥£¬È»ºó·µ»Ø¸ÅÂÊ×î¸ßµÄÄǸöÀà±ð¡£
# Ô¤²âÊä³ö£¨0»ò1£©
def predict(model, x):
W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'],
model['b2']
# ÕýÏò´«²¥
z1 = x.dot(W1) + b1
a1 = np.tanh(z1)
z2 = a1.dot(W2) + b2
exp_scores = np.exp(z2)
probs = exp_scores / np.sum(exp_scores, axis=1,
keepdims=True)
return np.argmax(probs, axis=1) |
×îºó£¬Õâ¸öº¯ÊýÓÃÀ´ÑµÁ·Éñ¾ÍøÂ磬ËüÀûÓÃÎÒÃÇ֮ǰÌáµ½µÄ·´Ïò´«²¥µ¼ÊýÀ´ÊµÏÖÅúÁ¿ÌݶÈϽµ¡£
# Õâ¸öº¯ÊýΪÉñ¾ÍøÂçѧϰ²ÎÊý²¢ÇÒ·µ»ØÄ£ÐÍ
# - nn_hdim: Òþ²Ø²ãµÄ½ÚµãÊý
# - num_passes: ͨ¹ýѵÁ·¼¯½øÐÐÌݶÈϽµµÄ´ÎÊý
# - print_loss: Èç¹ûÊÇTrue, ÄÇôÿ1000´Îµü´ú¾Í´òÓ¡Ò»´ÎËðʧֵ
def build_model(nn_hdim, num_passes=20000, print_loss=False):
# ÓÃËæ»úÖµ³õʼ»¯²ÎÊý¡£ÎÒÃÇÐèҪѧϰÕâЩ²ÎÊý
np.random.seed(0)
W1 = np.random.randn(nn_input_dim, nn_hdim) /
np.sqrt(nn_input_dim)
b1 = np.zeros((1, nn_hdim))
W2 = np.random.randn(nn_hdim, nn_output_dim) /
np.sqrt(nn_hdim)
b2 = np.zeros((1, nn_output_dim))
# ÕâÊÇÎÒÃÇ×îÖÕÒª·µ»ØµÄÊý¾Ý
model = {}
# ÌݶÈϽµ
for i in xrange(0, num_passes):
# ÕýÏò´«²¥
z1 = X.dot(W1) + b1
a1 = np.tanh(z1)
z2 = a1.dot(W2) + b2
exp_scores = np.exp(z2)
probs = exp_scores / np.sum(exp_scores, axis=1,
keepdims=True)
# ·´Ïò´«²¥
delta3 = probs
delta3[range(num_examples), y] -= 1
dW2 = (a1.T).dot(delta3)
db2 = np.sum(delta3, axis=0, keepdims=True)
delta2 = delta3.dot(W2.T) * (1 - np.power(a1,
2))
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
# Ìí¼ÓÕýÔòÏî (b1 ºÍ b2 ûÓÐÕýÔòÏî)
dW2 += reg_lambda * W2
dW1 += reg_lambda * W1
# ÌݶÈϽµ¸üвÎÊý
W1 += -epsilon * dW1
b1 += -epsilon * db1
W2 += -epsilon * dW2
b2 += -epsilon * db2
# ΪģÐÍ·ÖÅäеIJÎÊý
model = { 'W1': W1, 'b1': b1, 'W2': W2, 'b2':
b2}
# Ñ¡ÔñÐԵشòÓ¡Ëðʧ
# ÕâÖÖ×ö·¨ºÜÉݳޣ¬ÒòΪÎÒÃÇÓõÄÊÇÕû¸öÊý¾Ý¼¯£¬ËùÒÔÎÒÃDz»Ïë̫Ƶ·±µØÕâÑù×ö
if print_loss and i % 1000 == 0:
print "Loss after iteration %i: %f"
%(i, calculate_loss(model))
return model |
Òþ²Ø²ã½ÚµãÊýΪ3µÄÉñ¾ÍøÂç
µ±ÎÒÃÇѵÁ·Ò»¸öÒþ²Ø²ã½ÚµãÊýΪ3µÄÉñ¾ÍøÂçʱ£¬ÈÃÎÒÃÇ¿´¿´»á·¢Éúʲô¡£
# ´î½¨Ò»¸ö3άÒþ²Ø²ãµÄÄ£ÐÍ
model = build_model(3, print_loss=True)
# »³ö¾ö²ß±ß½ç
plot_decision_boundary(lambda x: predict(model,
x))
plt.title("Decision Boundary for hidden layer
size 3") |

Yes£¡Õâ¿´ÆðÀ´ºÜ°ô¡£ÎÒÃǵÄÉñ¾ÍøÂç·¢Ïֵľö²ß±ß½çÄܹ»³É¹¦µØÇø·ÖÊý¾ÝÀà±ð¡£
¸Ä±äÒþ²Ø²ãµÄ´óС
ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÎÒÃÇÑ¡ÔñÁËÓÐÈý¸ö½ÚµãµÄÒþ²Ø²ã£¬ÏÖÔÚÈÃÎÒÃÇ¿´¿´¸Ä±äÒþ²Ø²ãµÄ´óС»áÈçºÎÓ°Ïì×îÖյĽá¹û¡£
plt.figure(figsize=(16,
32))
hidden_layer_dimensions = [1, 2, 3, 4, 5, 20,
50]
for i, nn_hdim in enumerate(hidden_layer_dimensions):
plt.subplot(5, 2, i+1)
plt.title('Hidden Layer size %d' % nn_hdim)
model = build_model(nn_hdim)
plot_decision_boundary(lambda x: predict(model,
x))
plt.show() |

ÎÒÃÇ¿ÉÒÔ¿´µ½µÍά¶ÈµÄÒþ²Ø²ã¿ÉÒԺܺõز¶»ñÊý¾ÝµÄ´óÖ±߽磬¶ø¸ßά¶ÈµÄÒþ²Ø²ãÔò¸üÒ׳öÏÖ¹ý¶ÈÄâºÏ¡£ÕýÈçÎÒÃÇÆÚ´ýµÄÄÇÑù£¬ËüÃÇ¡°¼Çס¡±ÁËÊý¾Ý²¢ÊÊÓ¦ÁËÊý¾ÝµÄ´óÖÂÐÎ×´¡£Èç¹ûÎÒÃǽÓÏÂÀ´ÔÚÒ»¸ö¶ÀÁ¢µÄ²âÊÔ¼¯ÉÏÆÀ¹ÀÎÒÃǵÄÄ£ÐÍ£¨ÊÂʵÉÏÄãÒ²Ó¦¸ÃÕâô×ö£©£¬µÍά¶ÈµÄÒþ²Ø²ã»á±íÏֵøüºÃ£¬ÒòΪËüÃǸüÒ»°ã»¯¡£ÎÒÃÇ¿ÉÒÔÀûÓøü¸ßÇ¿¶ÈµÄÕýÔò»¯À´µÖÏû¹ý¶ÈÄâºÏ£¬µ«ÊÇΪÒþ²Ø²ãÑ¡ÔñÒ»¸öÕýÈ·µÄ³ß´çÔòÊDZȽϡ°¾¼Ã¡±µÄ½â¾ö°ì·¨¡£
Á·Ï°
ΪÁ˶ԴúÂë¸üÊìϤ£¬Äã¿ÉÒÔ³¢ÊÔ×öÏÂÃæÕâЩÊ£º
1.ÓÃСÅúÁ¿ÌݶÈϽµ·¨£¨Á˽â¸ü¶à£©¶ø²»ÊÇÅúÁ¿ÌݶÈϽµ·¨À´ÑµÁ·Éñ¾ÍøÂç¡£ÔÚʵ¼ùÖУ¬Ð¡ÅúÁ¿ÌݶÈϽµ·¨Í¨³£»á±íÏֵøüºÃ¡£
2.ÎÒÃÇÔÚÌݶÈϽµÊ±ÓÃÁ˹̶¨µÄѧϰÂÊ??¡£Äã¿ÉÒÔΪÌݶÈϽµµÄѧϰÂÊ´´½¨Ò»¸öË¥¼õ¹ý³Ì£¨Á˽â¸ü¶à£©¡£
3.ÎÒÃÇÔÚÒþ²Ø²ãʹÓõļ¤»îº¯ÊýÊÇtanhtanh¡£ÓÃÆäËûµÄ¼¤»îº¯Êýʵ¼ùһϣ¨ÓÐһЩÔÚÉÏÃæÌáµ½ÁË£©¡£×¢Ò⣺¸Ä±ä¼¤»îº¯ÊýÒ²¾ÍÒâζ×ÅÒª¸Ä±ä·´Ïò´«²¥µ¼Êý¡£
4.°ÑÉñ¾ÍøÂçµÄÊä³öÀà±ð´Ó2Ôö¼Óµ½3¡£Îª´ËÄãÐèÒªÉú³ÉÒ»¸öÀàËÆµÄÊý¾Ý¼¯¡£
½«Éñ¾ÍøÂçÀ©Õ¹µ½4²ã¡£ÔÚÉñ¾ÍøÂçµÄ²ãÊýÉÏÃæ×öÒ»ÏÂʵ¼ù¡£Ôö¼ÓÁíÍâÒ»¸öÒþ²Ø²ãÒâζ×ÅÄã²»½öÒªµ÷ÕûÕýÏò´«²¥µÄ´úÂ룬»¹Òªµ÷Õû·´Ïò´«²¥µÄ´úÂë¡£ |