怎么用python 中brian包进行神经网络简化模型

2024-05-04 13:06

1. 怎么用python 中brian包进行神经网络简化模型

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:王赟 Maigo
链接:http://www.zhihu.com/question/28606380/answer/41442872
来源:知乎


就我所知,Python有一个Theano库可以利用GPU进行矩阵运算和符号求导,在此基础上有PDNN等专门训练神经网络的工具包(PDNN是我实验室的同学开发的~)。

Matlab那边我不了解,随便搜了一下发现了一个Deep Neural Networks for Matlab。因为没有用过,所以不好评价。

怎么用python 中brian包进行神经网络简化模型

2. 如何用 Python 构建神经网络择时模型

生物神经网络:一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动。
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
人工神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网络。

3. 如何用 Python 构建神经网络择时模型

你好 python 并不会自动缓存数据, 极度怀疑你数据没插入成功,或者插入操作不在那个2秒SLEEP的时间里面。

如何用 Python 构建神经网络择时模型

4. 怎样用python构建一个卷积神经网络

用keras框架较为方便
首先安装anaconda,然后通过pip安装keras

以下转自wphh的博客。
#coding:utf-8'''    GPU run command:        THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python cnn.py    CPU run command:        python cnn.py2016.06.06更新:这份代码是keras开发初期写的,当时keras还没有现在这么流行,文档也还没那么丰富,所以我当时写了一些简单的教程。现在keras的API也发生了一些的变化,建议及推荐直接上keras.io看更加详细的教程。'''#导入各种用到的模块组件from __future__ import absolute_importfrom __future__ import print_functionfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Sequentialfrom keras.layers.core import Dense, Dropout, Activation, Flattenfrom keras.layers.advanced_activations import PReLUfrom keras.layers.convolutional import Convolution2D, MaxPooling2Dfrom keras.optimizers import SGD, Adadelta, Adagradfrom keras.utils import np_utils, generic_utilsfrom six.moves import rangefrom data import load_dataimport randomimport numpy as npnp.random.seed(1024)  # for reproducibility#加载数据data, label = load_data()#打乱数据index = [i for i in range(len(data))]random.shuffle(index)data = data[index]label = label[index]print(data.shape[0], ' samples')#label为0~9共10个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数label = np_utils.to_categorical(label, 10)################开始建立CNN模型################生成一个modelmodel = Sequential()#第一个卷积层,4个卷积核,每个卷积核大小5*5。1表示输入的图片的通道,灰度图为1通道。#border_mode可以是valid或者full,具体看这里说明:http://deeplearning.net/software/theano/library/tensor/nnet/conv.html#theano.tensor.nnet.conv.conv2d#激活函数用tanh#你还可以在model.add(Activation('tanh'))后加上dropout的技巧: model.add(Dropout(0.5))model.add(Convolution2D(4, 5, 5, border_mode='valid',input_shape=(1,28,28))) model.add(Activation('tanh'))#第二个卷积层,8个卷积核,每个卷积核大小3*3。4表示输入的特征图个数,等于上一层的卷积核个数#激活函数用tanh#采用maxpooling,poolsize为(2,2)model.add(Convolution2D(8, 3, 3, border_mode='valid'))model.add(Activation('tanh'))model.add(MaxPooling2D(pool_size=(2, 2)))#第三个卷积层,16个卷积核,每个卷积核大小3*3#激活函数用tanh#采用maxpooling,poolsize为(2,2)model.add(Convolution2D(16, 3, 3, border_mode='valid')) model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))#全连接层,先将前一层输出的二维特征图flatten为一维的。#Dense就是隐藏层。16就是上一层输出的特征图个数。4是根据每个卷积层计算出来的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4#全连接有128个神经元节点,初始化方式为normalmodel.add(Flatten())model.add(Dense(128, init='normal'))model.add(Activation('tanh'))#Softmax分类,输出是10类别model.add(Dense(10, init='normal'))model.add(Activation('softmax'))##############开始训练模型###############使用SGD + momentum#model.compile里的参数loss就是损失函数(目标函数)sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=["accuracy"])#调用fit方法,就是一个训练过程. 训练的epoch数设为10,batch_size为100.#数据经过随机打乱shuffle=True。verbose=1,训练过程中输出的信息,0、1、2三种方式都可以,无关紧要。show_accuracy=True,训练时每一个epoch都输出accuracy。#validation_split=0.2,将20%的数据作为验证集。model.fit(data, label, batch_size=100, nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)"""#使用data augmentation的方法#一些参数和调用的方法,请看文档datagen = ImageDataGenerator(        featurewise_center=True, # set input mean to 0 over the dataset        samplewise_center=False, # set each sample mean to 0        featurewise_std_normalization=True, # divide inputs by std of the dataset        samplewise_std_normalization=False, # divide each input by its std        zca_whitening=False, # apply ZCA whitening        rotation_range=20, # randomly rotate images in the range (degrees, 0 to 180)        width_shift_range=0.2, # randomly shift images horizontally (fraction of total width)        height_shift_range=0.2, # randomly shift images vertically (fraction of total height)        horizontal_flip=True, # randomly flip images        vertical_flip=False) # randomly flip images# compute quantities required for featurewise normalization # (std, mean, and principal components if ZCA whitening is applied)datagen.fit(data)for e in range(nb_epoch):    print('-'*40)    print('Epoch', e)    print('-'*40)    print("Training...")    # batch train with realtime data augmentation    progbar = generic_utils.Progbar(data.shape[0])    for X_batch, Y_batch in datagen.flow(data, label):        loss,accuracy = model.train(X_batch, Y_batch,accuracy=True)        progbar.add(X_batch.shape[0], values=[("train loss", loss),("accuracy:", accuracy)] )"""

5. 用python编写的神经网络结果怎么可视化

学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:



在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。

用python编写的神经网络结果怎么可视化

6. 如何利用python实现神经网络

官方不支持,建议等支持吧。 dll有自己版本对应的,必须使用专门为python3.4编译的dll(cv2.pyd),你拿python2.7的肯定用不了。 如果非要使用—— 方法一:自己编译opencv的源码 方法二:安装python2.7

7. 怎么用Python写神经网络

去学一下cntk或者tensorflow,这两个都是深度神经网络的软件包。

怎么用Python写神经网络

8. 如何用9行Python代码编写一个简易神经网络

  学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:

  

  在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。

  首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过程被称为“思考”。

  

  我们可以在计算机上写一个神经网络来模拟这个过程。不需要在生物分子水平模拟人脑,只需模拟更高层级的规则。我们使用矩阵(二维数据表格)这一数学工具,并且为了简单明了,只模拟一个有3个输入和一个输出的神经元。

  我们将训练神经元解决下面的问题。前四个例子被称作训练集。你发现规律了吗?‘?’是0还是1?

  

  你可能发现了,输出总是等于输入中最左列的值。所以‘?’应该是1。

  训练过程

  但是如何使我们的神经元回答正确呢?赋予每个输入一个权重,可以是一个正的或负的数字。拥有较大正(或负)权重的输入将决定神经元的输出。首先设置每个权重的初始值为一个随机数字,然后开始训练过程:

  取一个训练样本的输入,使用权重调整它们,通过一个特殊的公式计算神经元的输出。

  计算误差,即神经元的输出与训练样本中的期待输出之间的差值。

  根据误差略微地调整权重。

  重复这个过程1万次。

  

  最终权重将会变为符合训练集的一个最优解。如果使用神经元考虑这种规律的一个新情形,它将会给出一个很棒的预测。

  这个过程就是back propagation。

  计算神经元输出的公式

  你可能会想,计算神经元输出的公式是什么?首先,计算神经元输入的加权和,即

  

  接着使之规范化,结果在0,1之间。为此使用一个数学函数--Sigmoid函数:

  

  Sigmoid函数的图形是一条“S”状的曲线。

  

  把第一个方程代入第二个,计算神经元输出的最终公式为:

  

  你可能注意到了,为了简单,我们没有引入最低兴奋阈值。

  调整权重的公式

  我们在训练时不断调整权重。但是怎么调整呢?可以使用“Error Weighted Derivative”公式:

  

  为什么使用这个公式?首先,我们想使调整和误差的大小成比例。其次,乘以输入(0或1),如果输入是0,权重就不会调整。最后,乘以Sigmoid曲线的斜率(图4)。为了理解最后一条,考虑这些:

  我们使用Sigmoid曲线计算神经元的输出

  如果输出是一个大的正(或负)数,这意味着神经元采用这种(或另一种)方式

  从图四可以看出,在较大数值处,Sigmoid曲线斜率小

  如果神经元认为当前权重是正确的,就不会对它进行很大调整。乘以Sigmoid曲线斜率便可以实现这一点

  Sigmoid曲线的斜率可以通过求导得到:

  

  把第二个等式代入第一个等式里,得到调整权重的最终公式:

  

  当然有其他公式,它们可以使神经元学习得更快,但是这个公式的优点是非常简单。

  构造Python代码

  虽然我们没有使用神经网络库,但是将导入Python数学库numpy里的4个方法。分别是:

  exp--自然指数

  array--创建矩阵

  dot--进行矩阵乘法

  random--产生随机数

  比如, 我们可以使用array()方法表示前面展示的训练集:

  

  “.T”方法用于矩阵转置(行变列)。所以,计算机这样存储数字:

  

  我觉得我们可以开始构建更优美的源代码了。给出这个源代码后,我会做一个总结。

  我对每一行源代码都添加了注释来解释所有内容。注意在每次迭代时,我们同时处理所有训练集数据。所以变量都是矩阵(二维数据表格)。下面是一个用Python写地完整的示例代码。




  我们做到了!我们用Python构建了一个简单的神经网络!

  首先神经网络对自己赋予随机权重,然后使用训练集训练自己。接着,它考虑一种新的情形[1, 0, 0]并且预测了0.99993704。正确答案是1。非常接近!

  传统计算机程序通常不会学习。而神经网络却能自己学习,适应并对新情形做出反应,这是多么神奇,就像人类一样。
最新文章
热门文章
推荐阅读