首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】机器学习从零开始系列连载(7)——人工神经网络-Neural Network

【原创】机器学习从零开始系列连载(7)——人工神经网络-Neural Network

作者头像
lujohn3li
发布2020-03-04 15:15:51
2900
发布2020-03-04 15:15:51
举报

神经网络在维基百科上的定义是:

NN is a network inspired by biological neural networks (the central nervous systems of animals, in particular the brain) which are used to estimate or approximate functions that can depend on a large number of inputs that are generally unknown.(from wikipedia)

神经元

神经元是神经网络和SVM这类模型的基础模型和来源,它是一个具有如下结构的线性模型:

其输出模式为:

示意图如下:

神经网络的常用结构

神经网络由一系列神经元组成,典型的神经网络结构如下:

其中最左边是输入层,包含若干输入神经元,最右边是输出层,包含若干输出神经元,介于输入层和输出层的所有层都叫隐藏层,由于神经元的作用,任何权重的微小变化都会导致输出的微小变化,即这种变化是平滑的。

神经元的各种组合方式得到性质不一的神经网络结构 :

前馈神经网络

反向传播神经网络

循环神经网络

卷积神经网络

自编码器

Google DeepMind 记忆神经网络(用于AlphaGo)

一个简单的神经网络例子

假设随机变量 , 使用3层神经网络拟合该分布:

import numpy as np
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    import random
    import math
    import keras
    from keras.models import Sequential
    from keras.layers.core import Dense,Dropout,Activation
    def gd(x,m,s):      
      left=1/(math.sqrt(2*math.pi)*s)
      right=math.exp(-math.pow(x-m,2)/(2*math.pow(s,2)))
      return left*right
    def pt(x, y1, y2):
      if len(x) != len(y1) or len(x) != len(y2):
        print 'input error.'
        return
      plt.figure(num=1, figsize=(20, 6))
      plt.title('NN fitting Gaussian distribution', size=14)
      plt.xlabel('x', size=14)
      plt.ylabel('y', size=14)
      plt.plot(x, y1, color='b', linestyle='--', label='Gaussian distribution')
      plt.plot(x, y2, color='r', linestyle='-', label='NN fitting')
      plt.legend(loc='upper left')
      plt.savefig('ann.png', format='png')
    def ann(train_d, train_l, prd_d):
      if len(train_d) == 0 or len(train_d) != len(train_l):
        print 'training data error.'
        return
      model = Sequential()
      model.add(Dense(30, input_dim=1))
      model.add(Activation('relu'))
      model.add(Dense(30))
      model.add(Activation('relu'))
      model.add(Dense(1, activation='sigmoid'))
      model.compile(loss='mse',
                  optimizer='rmsprop',
                  metrics=['accuracy'])
      model.fit(train_d,train_l,batch_size=250, nb_epoch=50, validation_split=0.2)
      p = model.predict(prd_d,batch_size=250)
      return p
    if __name__ == '__main__':
      x = np.linspace(-5, 5, 10000)
      idx = random.sample(x, 900)
      train_d = []
      train_l = []
      for i in idx:
        train_d.append(x[i])
        train_l.append(gd(x[i],0,1))
      y1 = []
      y2 = []
      for i in x:
        y1.append(gd(i,0,1))
      y2 = ann(np.array(train_d).reshape(len(train_d), 1), np.array(train_l), np.array(x).reshape(len(x), 1))
      pt(x, y1, y2.tolist())
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档