导航:首页 > 异常信息 > 搭建如图所示的全连接神经网络

搭建如图所示的全连接神经网络

发布时间:2022-08-30 02:51:25

‘壹’ 怎样用python构建一个卷积神经网络

用keras框架较为方便

首先安装anaconda,然后通过pip安装keras


以下转自wphh的博客。

#coding:utf-8

'''
GPUruncommand:
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32pythoncnn.py
CPUruncommand:
pythoncnn.py

2016.06.06更新:
这份代码是keras开发初期写的,当时keras还没有现在这么流行,文档也还没那么丰富,所以我当时写了一些简单的教程。
现在keras的API也发生了一些的变化,建议及推荐直接上keras.io看更加详细的教程。

'''
#导入各种用到的模块组件
from__future__importabsolute_import
from__future__importprint_function
fromkeras.preprocessing.imageimportImageDataGenerator
fromkeras.modelsimportSequential
fromkeras.layers.coreimportDense,Dropout,Activation,Flatten
fromkeras.layers.advanced_activationsimportPReLU
fromkeras.layers.,MaxPooling2D
fromkeras.optimizersimportSGD,Adadelta,Adagrad
fromkeras.utilsimportnp_utils,generic_utils
fromsix.movesimportrange
fromdataimportload_data
importrandom
importnumpyasnp

np.random.seed(1024)#forreprocibility
#加载数据
data,label=load_data()
#打乱数据
index=[iforiinrange(len(data))]
random.shuffle(index)
data=data[index]
label=label[index]
print(data.shape[0],'samples')

#label为0~9共10个类别,keras要求格式为binaryclassmatrices,转化一下,直接调用keras提供的这个函数
label=np_utils.to_categorical(label,10)

###############
#开始建立CNN模型
###############

#生成一个model
model=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个神经元节点,初始化方式为normal
model.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)


"""
#使用dataaugmentation的方法
#一些参数和调用的方法,请看文档
datagen=ImageDataGenerator(
featurewise_center=True,#setinputmeanto0overthedataset
samplewise_center=False,#seteachsamplemeanto0
featurewise_std_normalization=True,#divideinputsbystdofthedataset
samplewise_std_normalization=False,#divideeachinputbyitsstd
zca_whitening=False,#applyZCAwhitening
rotation_range=20,#(degrees,0to180)
width_shift_range=0.2,#(fractionoftotalwidth)
height_shift_range=0.2,#randomlyshiftimagesvertically(fractionoftotalheight)
horizontal_flip=True,#randomlyflipimages
vertical_flip=False)#randomlyflipimages

#
#(std,mean,)
datagen.fit(data)

foreinrange(nb_epoch):
print('-'*40)
print('Epoch',e)
print('-'*40)
print("Training...")
#
progbar=generic_utils.Progbar(data.shape[0])
forX_batch,Y_batchindatagen.flow(data,label):
loss,accuracy=model.train(X_batch,Y_batch,accuracy=True)
progbar.add(X_batch.shape[0],values=[("trainloss",loss),("accuracy:",accuracy)])

"""


‘贰’ 什么是全连接神经网络,怎么理解“全连接”

1、全连接神经网络解析:对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。

2、全连接的神经网络示意图:


3、“全连接”是一种不错的模式,但是网络很大的时候,训练速度回很慢。部分连接就是认为的切断某两个节点直接的连接,这样训练时计算量大大减小。

‘叁’ 构造一个全连接的具有5个神经元但没有自反馈的递归电路

摘要 递归神经网络( RNN),是两种人工神经网络的总称,一种是 时间递归神经网络(recurrent neural network),另一种是 结构递归神经网络(recursive neural network)。现在大多数人把recurrent neural network称作循环神经网络,一般RNNs都指循环神经网络,也就是recurrent neural network。时间递归神经网络的神经元间连接构成有向图。,而结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络(大多数为无向图)

‘肆’ Hopfield神经网络用python实现讲解

神经网络结构具有以下三个特点:

神经元之间全连接,并且为单层神经网络。

每个神经元既是输入又是输出,导致得到的权重矩阵相对称,故可节约计算量。

在输入的激励下,其输出会产生不断的状态变化,这个反馈过程会一直反复进行。假如Hopfield神经网络是一个收敛的稳定网络,则这个反馈与迭代的计算过程所产生的变化越来越小,一旦达到了稳定的平衡状态,Hopfield网络就会输出一个稳定的恒值。

Hopfield网络可以储存一组平衡点,使得当给定网络一组初始状态时,网络通过自行运行而最终收敛于这个设计的平衡点上。当然,根据热力学上,平衡状态分为stable state和metastable state, 这两种状态在网络的收敛过程中都是非常可能的。

为递归型网络,t时刻的状态与t-1时刻的输出状态有关。之后的神经元更新过程也采用的是异步更新法(Asynchronous)。

Hopfield神经网络用python实现

‘伍’ 物体识别 机器学习

1、搭建物体识别神经网络,设计好网络的结构;
2、训练神经网络,优化网络参数;
3、识别新的图片。

‘陆’ 汽车发动机开环和闭环的区别

动态系统建模被各领域广泛应用,例如电动汽车,能源系统,航空航天。我们本文提到动态系统主要是被控对象,对被控对象进行建模是因为我们希望了解这个系统(被控对象)的物理特性以及接受一些外部输入(力,扭矩,电流等等)时会有什么样的动态响应,基于此从而可以更好的给出控制输入得到我们期望的系统的输出,以及理解系统的退化或最大化提升系统效率。

这些动态系统的行为是由多物理场复杂的交互作用决定的,因此系统行为和系统响应建模通常需要复杂的第一原理支撑,仿真时也需要大量的计算(例如有限元模型)。

这也是本文的出发点,提供数据驱动(主要介绍深度学习和系统辨识)的模型降阶(Reced Order Modeling)提速的方法,通过数据得到具有一定保真度的数据模型,在捕捉到系统动态特性的同时也提升仿真速度。

本文中将涉及多个 demo,数据以及脚本文件,若您感兴趣进一步获取这些链接,可以在文末填写反馈问卷,获取这些链接。

动态系统

动态系统包含状态空间 S, 时间集 T 和一个映射(规则)来描述状态随时间的演变规则 R:S×T→S。例如给定一个时刻 t 的状态 st ,通过这个规则可以计算后面一个或几个时刻状态 st+1=R(st),st+2=R(R(st)) 等等。动态系统通常可以用随时间变化的方程或方程组来描述。尤其对于连续时间系统,可以通过微分方程来表示。

我们先看一个简单的常微分系统(ODE), [链接1]

其中 y(t) 是系统状态。例如:一个简单二自由度线性系统,

其中 A 是一个 2x2 的矩阵。初始条件 x0 = [2; 0], 可以通过求解 ODE 方程得到的相应的二维输出 x(t),包含两个状态,时序和动态图如下:

图表 1 系统输出x(t):

x0 = [2; 0];

A = [-0.1 -1; 1 -0.1];

trueModel = @(t,y) A*y; % 定义系统函数,此处就是一个状态空间方程

numTimeSteps = 2000;

T = 15;

odeOptions = odeset(RelTol=1.e-7);

t = linspace(0, T, numTimeSteps);

[~, xTrain] = ode45(trueModel, t, x0, odeOptions);

后面(在介绍 Neural ODE 部分)我们会尝试利用这个系统的数据 xTrain 进行深度学习模型的训练来得到这个系统的数据代理模型(Surrogate Model),这种思路也可以同样用于复杂系统。

既然数据驱动,有很多机器学习和深度学习算法可以用,那动态系统建模有什么特殊性呢,不是都适用吗?

目前工程中已经用到很多稳态(静态)模型。例如在发动机排放标定,通过 DoE 试验时我们会将发动机维持在不同的稳态工况(转速恒定,扭矩恒定等等),通过试验数据建模得到用于标定的稳态数据模型[链接2]。

稳态工况下,对于方程(1)这样一个简单系统,其中 y(t)' 可以看作 0,到达平衡点,于是 y(t) 和 u(t) 关系恒定,不再在时间维度上与历史状态 y(t-1),y(t-2) 等等有关,因此稳态模型针对稳态工况是非常准的。

而在瞬态工况下通常 y(t)' 非零,因此方程(1)在求解系统输出 y(t) 时不仅由当前时刻的输入 u(t) 决定,还取决于 y(t-1),y(t-2),u(t-1), u(t-2) 等等,这就是动态系统的特殊性,当前输出不仅依赖于当前的输入,还依赖于系统过去的行为(历史输入和历史输出)。我们在下一篇关于系统辨识的文章中会基于示例详细说明这一点。

不考虑动态系统,单纯从系统建模来说,通常有如下的两个方向:基于第一原理的和基于数据驱动的。

第一原理建模是领域工程师都比较熟悉的,例如可以使用 M 脚本语言,Simulink 或 Simscape 建模语言从物理原理进行系统模型的创建。

那什么情况下搭建系统会考虑使用或部分使用数据代理模型(Surrogate Model)?


‘柒’ 从零开始用Python构建神经网络

从零开始用Python构建神经网络
动机:为了更加深入的理解深度学习,我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架。我认为理解神经网络的内部工作原理,对数据科学家来说至关重要。
这篇文章的内容是我的所学,希望也能对你有所帮助。
神经网络是什么?
介绍神经网络的文章大多数都会将它和大脑进行类比。如果你没有深入研究过大脑与神经网络的类比,那么将神经网络解释为一种将给定输入映射为期望输出的数学关系会更容易理解。
神经网络包括以下组成部分
? 一个输入层,x
? 任意数量的隐藏层
? 一个输出层,?
? 每层之间有一组权值和偏置,W and b
? 为隐藏层选择一种激活函数,σ。在教程中我们使用 Sigmoid 激活函数
下图展示了 2 层神经网络的结构(注意:我们在计算网络层数时通常排除输入层)

2 层神经网络的结构
用 Python 可以很容易的构建神经网络类

训练神经网络
这个网络的输出 ? 为:

你可能会注意到,在上面的等式中,输出 ? 是 W 和 b 函数。
因此 W 和 b 的值影响预测的准确率. 所以根据输入数据对 W 和 b 调优的过程就被成为训练神经网络。
每步训练迭代包含以下两个部分:
? 计算预测结果 ?,这一步称为前向传播
? 更新 W 和 b,,这一步成为反向传播
下面的顺序图展示了这个过程:

前向传播
正如我们在上图中看到的,前向传播只是简单的计算。对于一个基本的 2 层网络来说,它的输出是这样的:

我们在 NeuralNetwork 类中增加一个计算前向传播的函数。为了简单起见我们假设偏置 b 为0:

但是我们还需要一个方法来评估预测结果的好坏(即预测值和真实值的误差)。这就要用到损失函数。
损失函数
常用的损失函数有很多种,根据模型的需求来选择。在本教程中,我们使用误差平方和作为损失函数。
误差平方和是求每个预测值和真实值之间的误差再求和,这个误差是他们的差值求平方以便我们观察误差的绝对值。
训练的目标是找到一组 W 和 b,使得损失函数最好小,也即预测值和真实值之间的距离最小。
反向传播
我们已经度量出了预测的误差(损失),现在需要找到一种方法来传播误差,并以此更新权值和偏置。
为了知道如何适当的调整权值和偏置,我们需要知道损失函数对权值 W 和偏置 b 的导数。
回想微积分中的概念,函数的导数就是函数的斜率。

梯度下降法
如果我们已经求出了导数,我们就可以通过增加或减少导数值来更新权值 W 和偏置 b(参考上图)。这种方式被称为梯度下降法。
但是我们不能直接计算损失函数对权值和偏置的导数,因为在损失函数的等式中并没有显式的包含他们。因此,我们需要运用链式求导发在来帮助计算导数。

链式法则用于计算损失函数对 W 和 b 的导数。注意,为了简单起见。我们只展示了假设网络只有 1 层的偏导数。
这虽然很简陋,但是我们依然能得到想要的结果—损失函数对权值 W 的导数(斜率),因此我们可以相应的调整权值。
现在我们将反向传播算法的函数添加到 Python 代码中

为了更深入的理解微积分原理和反向传播中的链式求导法则,我强烈推荐 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合并完成一个实例
既然我们已经有了包括前向传播和反向传播的完整 Python 代码,那么就将其应用到一个例子上看看它是如何工作的吧。

神经网络可以通过学习得到函数的权重。而我们仅靠观察是不太可能得到函数的权重的。
让我们训练神经网络进行 1500 次迭代,看看会发生什么。 注意观察下面每次迭代的损失函数,我们可以清楚地看到损失函数单调递减到最小值。这与我们之前介绍的梯度下降法一致。

让我们看看经过 1500 次迭代后的神经网络的最终预测结果:

经过 1500 次迭代训练后的预测结果
我们成功了!我们应用前向和方向传播算法成功的训练了神经网络并且预测结果收敛于真实值。
注意预测值和真实值之间存在细微的误差是允许的。这样可以防止模型过拟合并且使得神经网络对于未知数据有着更强的泛化能力。
下一步是什么?
幸运的是我们的学习之旅还没有结束,仍然有很多关于神经网络和深度学习的内容需要学习。例如:
? 除了 Sigmoid 以外,还可以用哪些激活函数
? 在训练网络的时候应用学习率
? 在面对图像分类任务的时候使用卷积神经网络
我很快会写更多关于这个主题的内容,敬请期待!
最后的想法
我自己也从零开始写了很多神经网络的代码
虽然可以使用诸如 Tensorflow 和 Keras 这样的深度学习框架方便的搭建深层网络而不需要完全理解其内部工作原理。但是我觉得对于有追求的数据科学家来说,理解内部原理是非常有益的。
这种练习对我自己来说已成成为重要的时间投入,希望也能对你有所帮助

‘捌’ sklearn神经网络节点数一般选多少

一般从1开始。
因为是全连接神经网络,所以会有很多个参数,参数右上角是下一层对应的网络层数(在吴恩达系列视屏中输入层不作为一层。
所以右上角是从1开始的,此处是从2开始的),右下角第一个数是下一层神经元的位置,第二个数是前一层神经元的位置。

‘玖’ 什么是全连接神经网络怎么理解“全连接”

1、全连接神经网络解析:对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。

2、全连接的神经网络示意图:


3、“全连接”是一种不错的模式,但是网络很大的时候,训练速度回很慢。部分连接就是认为的切断某两个节点直接的连接,这样训练时计算量大大减小。

‘拾’ 怎么将两个神经网络com

用numpy。
用numpy实现两层神经网络,一个全连接ReLU神经网络,一个隐藏层,没有bias。用来从x预测y,使用L2将cnn和mlp网络进行组合。

阅读全文

与搭建如图所示的全连接神经网络相关的资料

热点内容
网络共享中心没有网卡 浏览:527
电脑无法检测到网络代理 浏览:1376
笔记本电脑一天会用多少流量 浏览:595
苹果电脑整机转移新机 浏览:1380
突然无法连接工作网络 浏览:1077
联通网络怎么设置才好 浏览:1230
小区网络电脑怎么连接路由器 浏览:1054
p1108打印机网络共享 浏览:1215
怎么调节台式电脑护眼 浏览:717
深圳天虹苹果电脑 浏览:952
网络总是异常断开 浏览:617
中级配置台式电脑 浏览:1012
中国网络安全的战士 浏览:637
同志网站在哪里 浏览:1420
版观看完整完结免费手机在线 浏览:1464
怎样切换默认数据网络设置 浏览:1113
肯德基无线网无法访问网络 浏览:1290
光纤猫怎么连接不上网络 浏览:1496
神武3手游网络连接 浏览:969
局网打印机网络共享 浏览:1005