搭建神经网络八股——keras实现

1.网络八股

本文主要使用Tensorflow的API;tf.keras搭建网络八股

主要分为六步法:

  1. import:导入相关的模块
  2. train,test:告知需要喂入网路的训练集和测试集是什么
  3. model = tf.keras.models.Sequential:在Sequential中搭建网络,逐层描述每层网络,相当于走了一遍前向传播
  4. model.compile:配置训练方法,告知训练时采用哪种优化器,选择哪个损失函数,选择什么评测指标
  5. model.fit:执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
  6. model.summary:打印出网络结构和参数统计

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

在Sequential中封装了一个网络结构,在其中要描述从输入层到输出层每一层的网络结构,每一层的网络结构可以如下:

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

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

其中:

activation(字符串的方式给出):可选relu、softmax、sigmoid、tanh

kernel_regularizer可选:tf.keras.regularizers.l1()、tf.keras.regularizers.l2()

卷积层:tf.keras.layers.Conv2D(filters=卷积核个数,kernel_size=卷积核大小,strides=卷积步长,padding=”valid” or “SAME”)

LSTM层:tf.keras.layers.LSTM()

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

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)

Loss可选:

  • “mse” or tf.keras.losses.MeanSquaredError()
  • "sparse_categorical_crossentropy" or "tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)"

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]

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

1.4model.summary()打印出网络模型

2.对鸢尾花的利用网络八股,六步法实现

# 第一步 import
import tensorflow as tf
from sklearn import datasets
import numpy as np

# 第二步 train,test
# 交代训练集和测试集的训练数据
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_random_seed(116)

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

# 第四步:model.compile
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='sgd',
              metrics=['sparse_categorical_accuracy'])
# model.fit
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2)

# model.summary
model.summary()

搭建神经网络八股——keras实现_第1张图片

 原来100多行代码只需要20多行就实现了。

3.class类封装网络结构

结构如下所示:

class MyModel(Model):
    def __init__(self):
        super(MyModel, self).__init__()
        # 定义网络结构块:例如鸢尾花分类是有三个神经元的全连接
        def call(self, x):
    def call(self, x):
        # 调用网络结构快,实现前向传播
        returen y

model = MyModel()

例如使用类的方式实现鸢尾花分类如下:

你可能感兴趣的:(深度学习,神经网络,keras,tensorflow)