Tensorflow2.1入门 第三章:使用“八股”搭建神经网络

Tensorflow2.1入门 第三章:使用“八股”搭建神经网络

  • 一、tf.keras搭建网络八股
    • 1. 六步法
    • 2. Sequential方法
    • 3. Class方法
    • 4. 配置训练方法
      • (1)优化器
      • (2)损失函数
      • (3)评判标准
  • 二、Mnist:手写数字训练集
  • 三、Fashion:衣裤图片训练集

一、tf.keras搭建网络八股

1. 六步法

  1. import:导入相关模块。
  2. train, test:导入训练集、测试集的特征及标签。
  3. model=tf.keras.models.Sequential:在Sequential中逐层描述网络,相当于走一遍前向传播。
  4. model.compile:配置训练方法(优化器、损失函数、训练指标)。
  5. model.fit:执行训练过程。
  6. model.summary:打印出网络结构和参数统计。

2. Sequential方法

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

网络结构:

  1. 拉直层:tf.keras.layers.Flatten()
    本身不含计算,仅能改变形状,将数据变为一位数组(拉直)。

  2. 全连接层:tf.keras.layers.Dense(神经元个数,activation="激活函数",kernel_regularizer=正则化方式)
    activation(字符串给出)可选:relu、softmax、sigmoid、tanh
    kernel_regularizer可选:tf.keras.regularizer.l1()、tf.keras.regularizer.l2()

''' 课程内方法'''
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
'''之前学到的方法'''
model = tf.keras.Sequential(name="MnistSequential")
model.add(layers.Dense(128, activation="relu", input_shape=(784,), name="inputs_layer"))
model.add(layers.Dense(64, activation="relu", name="mid_layer"))
model.add(layers.Dense(10, activation="softmax", name="outputs_layer"))  # 搭建完三层的神经网络

p8_iris_sequential.py

3. Class方法

class MyModel(Model): #继承了Tensorflow中的Model类
     def __init__(self):
          super(MyModel, self).__init__()
          定义网络结构块
     def call(self, x):
          调用网络结构块,实现前向传播
          return y
model = MyModel()
使用class类封装一个神经网络结构。

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model

class IrisModel(Model):
    def __init__(self):
        super(IrisModel, self).__init__()
        self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())

    def call(self, x):
        y = self.d1(x)
        return y

model = IrisModel()

p11_iris_class.py

4. 配置训练方法

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

(1)优化器

  1. ‘sgd’ 或者 tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数)
  2. ‘adagrad’ 或者 tf.keras.optimizers.Adagrad(lr=学习率)
  3. ‘adadelta’ 或者 tf.keras.optimizers.Adadelta(lr=学习率)
  4. ‘adam’ 或者 tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)

建议初学时先使用字符串,之后再通过tensorflow官网查看函数,来调节超参数。

(2)损失函数

  1. ‘mse’ 或者 tf.keras.losses.MeanSquaredError()
  2. ‘sparse_categorical_crossentropy’ 或者 tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

from_logits参数是在询问是否是原始输入(还是经过softmax变成概率分布的输出),若经过概率分布是False,否则是True。

(3)评判标准

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

在callback中想要保存最佳模型,好像只能在评判标准初选择’acc’,然后callback的monitor选择’val_acc’?

二、Mnist:手写数字训练集

进行归一化:把输入特征的数值变小更适合神经网络吸收。

p13_mnist_datasets.py
p14_mnist_sequential.py
p15_mnist_class.py’

似乎不需要声明输入维数??

三、Fashion:衣裤图片训练集

p16_fashion_class.py
p16_fashion_sequential.py

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