用Keras创建神经网络和神经网络相关知识(持更)

首先,使用Keras创建神经网络主要分为四部分:

1.定义训练测试数据:输入张量和目标张量。

2.定义网络(模型),将输入映射到目标。

3.配置学习过程:选择损失函数,优化器,和监控指标。

4.fit方法进行训练迭代。

5.evaluate测试。

6.predict评估。

基本过程:

1.定义数据:

2.定义网络:

       1.Sequential类(层的线性堆叠)常用。

                   from keras import models

                   from keras import layers

                   model=models.Sequential()

                   model.add(layers.Dense(32,activation='relu',inpute_shape=(784,)))         

(创建了一个层,只接受第一个维度大小为784 的 2D 张量(第0 是批量维度,其大小没有指定,因此可以任意取值)作为输入。这个层将返回一个张量,第一个维度的大小变成 了 32。 )

(,逗号从外往里数

                   model.add(layers.Dense(10, activation='softmax'))   //10为类别,10维向量

                                     //如果要对 N 个类别的数据点进行分类,网络的最后一层应该是大小为 N 的 Dense 层。

                                     //对于回归问题来说,只需要为1,不需要进行softmax。 

       2.函数式API(有向无环图).

3.配置学习过程:

       model.compile(optimizer=optimizers.RMSprop(lr=0.001), / 或者:optimizer='rmsprop'

                               loss='mse'

                              metrics=['accuracy'] )

4.训练:

      model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)

5.测试:

      results=model.evaluate(x_test,y_test)

6.预测:

      model.predict(x_test)

 

具体选择:

        简单的向量数据保存在 形状为 (samples, features) 的 2D 张量中,通常用密集连接层[densely connected layer,也 叫全连接层(fully connected layer)或密集层(dense layer),对应于Keras 的 Dense 类]来处理。序列数据保存在形状为 (samples, timesteps, features) 的 3D 张量中,通常用循环 层(recurrent layer,比如Keras 的 LSTM 层)来处理。图像数据保存在4D 张量中,通常用二维 卷积层(Keras 的 Conv2D)来处理。

       损失函数:对于二分类问题,你可以使用二元交叉熵(binary crossentropy)损失函数;对于多分类问题,可以用分类交叉熵(categorical crossentropy)损失函数;对于回归 问题,可以用均方误差(mean-squared error)损失函数;对于序列学习问题,可以用联结主义 时序分类(CTC,connectionist temporal classification)损失函数。

       无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。

绘图小知识:

import matplotlib.pyplot as plt

import numpy as np

x=np.array([1,3,5,2,7])

y=np.array([2,5,7,9,0])

 

plt.clf() //清空图像

plt.plot(x,y,label='标签')

plt.title('测试')

plt.xlabel('横坐标')

plt.legend() //加图例

plt.show() //显示

 

 

无监督知识:

定义:在没有标签的情况下找到数据的变换。

主要是进行数据分析,降维聚类都是无监督学习方法。(原理都为函数的映射)

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。

聚类:K-means:随机选取初始点,计算距离,归类,再重新划分中心。重复。

强化学习:

智能体(agent)接收有关其环境的信息,并学会选择使某种奖励最大化的行为。

为什么不是两个集合:一个训练集和一个测试集?还需要验证集?

原因在于开发模型时总是需要调节模型配置,比如选择层数或每层大小[这叫作模型的超 参数(hyperparameter),以便与模型参数(即权重)区分开]。这个调节过程需要使用模型在验 证数据上的性能作为反馈信号。这个调节过程本质上就是一种学习:在某个参数空间中寻找良 好的模型配置。因此,如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验 证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。 会导致在新的数据上出现错误。

 

 

创建卷积神经网络


from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) #卷积网络的接收形状为(H,W,C)
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.summary()#查看架构

宽度和高度会随着网络加深而变小。通道数则由传入的第一个参数设置。

model.add(layers.Flatten())#将3D张量展开为1D
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

密集连接(全连接)和卷积连接的最大区别就在于,前者学到的是全局样式,后者则为局部的样式。

卷积过程:

 

通道理解:

对于3*3,通道为32的卷积核来说,他的输入为32(上一层的输出),输入图像有几层通道,就有一个卷积和有几层通道,有一个卷积核输出就为一个,是不同通道的叠加。

以Le-net为例子,输入为灰度图像,通道数为1,与六个不同的卷积核进行卷积会得到六个feature map,然后在和16个卷积核进行卷积,每个卷积核的通道数为6,但是最后的结果则为一个feature map,所以会得到16个feature map。

对于VGG来说,输入图像是3层,通道数64 的卷积核,相当于64个3层的卷积,会得到64个Feature map。

数据预处理:

将数据输入神经网络之前,应该将数据格式化为经过预处理的浮点数张量。现在,数据以JPEG 文件的形式保存在硬盘中,所以数据预处理步骤大致如下。

(1) 读取图像文件。
(2) 将JPEG 文件解码为RGB 像素网格。
(3) 将这些像素网格转换为浮点数张量。
(4) 将像素值(0~255 范围内)缩放到[0, 1] 区间(正如你所知,神经网络喜欢处理较小的输
入值)。

keras.preprocessing.image。特别地,它包含ImageDataGenerator 类,可以快速创建Python 生成器,能够将硬盘上的图像文件自动转换为预处理好的张量批量。

python generator()

数据增强:

为了解决过拟合,我们需要将数据进行数据增强,主要是通过缩放,旋转等手段对数据进行处理,在生成器中使用即可。

train_datagen=ImageDataGenerator(rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,)
test_datagen=ImageDataGenerator(rescale=1./255)#不能增强验证数据

train_generator=train_datagen.flow_from_directory(train_dir,target_size=(150,150),batch_size=32,class_mode='binary')
validation_generator=test_datagen.flow_from_directory(validation_dir,target_size=(150,150),batch_size=32,class_mode='binary')

 

如果要使用GPU跑keras程序的话,需要安装对应gpu版本的tensorflow和keras,二者也是有对应版本的,比如tf1.5.0对应keras2.6.1.在安装好环境之后,要在程序里添加

import os

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

就可以了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值