tensorflow(7)---基于keras搭建神经网络模型

官方介绍:

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlowCNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你在以下情况下需要深度学习库,请使用 Keras:

  • 允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
  • 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  • 在 CPU 和 GPU 上无缝运行。

Keras 兼容的 Python 版本: Python 2.7-3.6

并且,官方推荐tensorflow搭配keras一起使用。

讲完定义,下面来看看keras怎么在代码中运用。

利用keras搭建全连接神经网络分为以下几步:

        1.import

        2.train,test

        3.model

        4.model.compile

        5.model.fit

        6.model.summary

分步介绍:

本次代码以简单识别鸢尾花数据集为例来讲解各步骤详细信息,中间部分是各部分代码具体实现,各参数讲解在文章末尾,还请各位小伙伴耐住性子往下看

1.import   导入相关库和数据集,例如

 

2.train,test        切分训练集和测试集,为了后面训练和测试用,切分办法常用两种,一种是用np.shuffle打乱并且设置随机数种子(前面几个文章有),另一种是用sklearn的库

from sklearn.model_selection import train_test_split

然后将data数据和target标签数据进行切分

# 导入数据
x= load_iris().data
y= load_iris().data

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

3.model   这一步是很关键的一步,利用keras.models.Sequential或者tf.keras.models.Sequential(这俩其实是一个东西,如果你导入的时候用的是from tensorflow import keras,那么就写第一个,如果只导入了tensorflow,就用第二个写法)构建训练模型,

最简单的加一个4个神经元的网络

model = tf.keras.models.Sequential([
    keras.layers.Dense(4,activation=tf.nn.relu)
])

这些参数有什么含义会在下面讲解,各位小伙伴莫急,

4.model.compile   model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准,这里我用的是

model.compile(optimizer='sgd',loss='mean_squared_error')

同样后面讲解参数

之后便是第五步,5.model.fit   拟合训练数据

model.fit(x_train,y_train,epochs=500)

6.model.summary

model.summary()

至此,利用keras搭建神经网络代码完结,下面看看完整代码和运行效果

import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import load_iris
import numpy as np
from sklearn.model_selection import train_test_split


# 导入数据
x= load_iris().data
y= load_iris().data

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

model = tf.keras.models.Sequential([
    keras.layers.Dense(4,activation=tf.nn.relu)
])
model.compile(optimizer='sgd',loss='mean_squared_error')
model.fit(x_train,y_train,epochs=500)
result = model.predict(x_test)
model.summary()
print(result)

 下面我们来具体看看构建网络中的各参数选择:

首先第一步import不用过多解释,导入需要的数据集和,重点在第3,4,5步

来看第三步:

model = tf.keras.models.Sequential([网络结构])

这里的网络结构包括Flatten,Dense,Conv2D等等

拉直层:tf.keras.layers.Flatten()

Flatten代表拉直层,例如输入的数据是一个(28x28)个像素点的图片,那么在Flatten层中这个图片会被降维,变成(1,784)的数组,在图片处理中构建的网络结构中第一步一般都是用Flatten降维数据,再送入后面的神经元中.

全连接层:tf.keras.layers.Dense(神经元个数,activation="激活函数",kernel_regularizer=哪种正则化)

神经元个数代表该隐藏层中用于处理数据的神经元有几个,

activation(字符串给出)可选:relu,softmax,sigmoid,tanh
kernel_regularizer可选:tf.keras.regularizers.l1(),tf.keras.regularizers.l2()

relu,softmax,sigmoid和tanh在前面文章中有讲到,忘记的小伙伴可以回去翻看前面的文章,或者去找找更详细的介绍,这里不多赘述。

正则化分为两种,L1正则和L2正则

 

卷积层:tf.keras.layers.Conv2D(filters=卷积核个数,kernel_size=卷积层尺寸,strides=卷积步长,padding="valid")

Conv2D代表卷积层,在后面讲解卷积神经网络的时候后用刀,这里先做了解,知道有这个东西

讲完网络构建之后,咱们来看第四步,model.compile

这一步是模型的一些参数,包括损失函数,优化器,准确率等等参数配置,

model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"])
优化器包括以下几种:
'sgd' or tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数)
'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率)
'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率)
'adam' or tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)

loss可选:

'mse' or tf.keras.losses.MeanSquaredError()

'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

from_logits: 为True时,会将y_pred转化为概率(用softmax),否则不进行转换,通常情况下用True结果更稳定

Metrics可选 :

'accuracy':y_和y都是数值 

'categorical_accuracy':y_和y都是独热码(概率分布)

'sparse_categorical_accuracy':y_是数值,y是独热码


# model.fit(训练集的输入特征,训练集的标签,
#           batch_size=,epochs=,
#           validation_data=(测试集的输入特征,测试集的标签
#           validation_split=从训练集划分多少比例给测试集)
#           validation_freq=多少次epoch测试一次)

# model.summary()生成报告

在本次程序中,构建的是一个单层网络,只有四个神经元

 单层网络中选择的激活函数为relu函数,compile中选择的损失函数为均方误差mean_squared_error,优化器选择sgd

fit中迭代次数为500,最后summary查看训练结果

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值