用Tensorflow API:tf.keras搭建网络八股(一)

目录

Tensorflow2.0的API:tf.keras来搭建网络八股,以鸢尾花数据集来演示。

一、导包

首先导入需要的包:

import tensorflow as tf
from sklearn import datasets
import numpy as np

二、导入数据集

tensorflow的sklearn库内置了鸢尾花数据集,只需要将其导入即可:

x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

三、Sequential搭建网络

使用下面这行代码搭建网络结构:

model = tf.keras.models.Sequential ([ 网络结构 ]) #描述各层网络

其中的网络结构如下:

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

1.拉直层不含计算,只是形状转换,将输入特征拉直变成一位数组。
2.在全连接层中:
activation参数(字符串给出)可选: relu、 softmax、 sigmoid 、 tanh;
kernel_regularizer可选: tf.keras.regularizers.l1()、tf.keras.regularizers.l2()

四、compile配置训练方法

model.compile(optimizer = 优化器,
				loss = 损失函数
				metrics = [“准确率”] )

1.optimizer用于告知选择哪种优化器,有以下选择:

‘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)

2.loss 用于告知选择哪种损失函数,有以下选择:

‘mse’ or tf.keras.losses.MeanSquaredError()
‘sparse_categorical_crossentropy’ or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

这里from_logits参数表示前面Sequential的输出是否是原始输出,如果在预测前经过了概率分布,则from_logits=False,如果没有经过概率分布则from_logits=False=True

3.metrics 用于告知网络的评测指标,有以下选择:

‘accuracy’ :y_和y都是数值,如y_=[1] y=[1]
‘categorical_accuracy’ :y_和y都是独热码(概率分布),如y_=[0,1,0] y=[0.256,0.695,0.048]
‘sparse_categorical_accuracy’ :y_是数值,y是独热码(概率分布),如y_=[1] y=[0.256,0.695,0.048]

五、fit执行训练过程

fit()用于执行训练过程,告知一些参数的设置。

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

六、summary输出网络结构及参数

model.summary()

summary()输出网络的层数及参数,结果如下:
在这里插入图片描述
上图显示的网络为一层全连接层,总参数数量为15个,可训练的参数为15个,不可训练的参数为0个。

七、总体代码

import tensorflow as tf
from sklearn import datasets
import numpy as np

x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

#数据集的乱序
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])

#前面使用了softmax激活函数,使得输出为概率分布,所以from_logits设置为False
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)

model.summary()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值