zoukankan      html  css  js  c++  java
  • 【tensorflow】tf.keras + Sequential() 6 步搭建神经网络

    tf.keras 是 tensorflow API,可以快速搭建神经网络模型。

    六步:

    1. import 相关模块。
    2. 指定要喂入网络的训练集和测试集。
    3. 在 Sequential() 中搭建网络结构。
    4. 在 compile() 中配置训练方法。
    5. 在 fit() 中执行训练过程。
    6. 用 summary() 打印出网络的结构和参数统计

    Sequential()

    可以认为是一种容器,这个容器封装了一个神经网络结构。

    在 Sequential() 中,要描述从输入层到输出层每一层的网络结构。

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

    每一层的网络结构可以是:

    拉直层:不含计算,只是形状转换,把输入特征拉直成一维数组

    tf.keras.layers.Flatten()

    全连接层

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

    • 激活函数可以选择:“relu”,“softmax”,“sigmoid”,“tanh”(以字符串给出)
    • 正则化可以选择:

    tf.keras.regularizers.l1()

    tf.keras.regularizers.l2()

    卷积神经网络层

    循环神经网络层

    compile()

    配置神经网络的训练方法,告知训练时选择的优化器、损失函数和评测指标。

    model.compile(optimizer=优化器, loss=损失函数, metrics=["评测指标"])

    • 优化器可以是字符串形式给出的优化器名字:“sgd”,“adagrad”,“adadelta”,“adam”

    还可以是函数形式:

    tf.keras.optimizers.SGD(lr=学习率, momentum=动量参数)

    tf.keras.optimizers.Adagrad(lr=学习率)

    tf.keras.optimizers.Adadelta(lr=学习率)

    tf.keras.optimizers.Adam(lr=学习率, beta_1=0.9, beta_2=0.999)

    • loss 可以是字符串给出的损失函数名字:“mse”,“sparse_categorical_crossentropy”

    也可以是函数形式:

    tf.keras.losses.MSE()

    tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

    有些神经网络的输出是经过了softmax函数的概率分布,有些则不经概率分布直接输出。

    可以认为 from_logits 这个参数是在询问:是否是原始输出,即没有经过概率分布的输出。

    如果神经网络预测结果输出前经过了概率分布,写False;

    如果神经网络预测结果输出前没有经过概率分布,写True。

    • metrics 告知网络评测指标:

    y_:标签,y:预测结果

    “accuracy”:y_和y都是以数字形式给出

    “categorical_accuracy”:y_和y都是以独热码(概率分布)的形式给出

    “sparse_categorical_accuracy”:y_以数值形式给出,y以独热码形式给出

    fit()

    执行训练过程。

    model.fit(训练集的输入特征, 训练集的标签,

              batch_size=, epochs=,

              validation_data=(测试集的输入特征, 测试集的标签),

              validation_split=从训练集中划分多少比例给测试集,

              validation_freq=多少次epoch测试一次 )

    • validation_data,validation_split 二选其一

    summary()

    打印出网络的结构和参数统计。

     

    鸢尾花分类代码:(不使用 tf.keras API的代码

    # import 相关模块
    import tensorflow as tf
    import numpy as np
    from sklearn import datasets
    
    # 指定要喂入网络的训练集和测试集
    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)
    
    # 在 Sequential() 中搭建网络结构
    model = tf.keras.models.Sequential(
        # 全连接层
        # tf.keras.layers.Dense(神经元个数,
        #                       activation="激活函数",
        #                       kernel_regularizer=哪种正则化)
        [tf.keras.layers.Dense(3,
                               activation="softmax",
                               kernel_regularizer=tf.keras.regularizers.l2())]
    )
    
    # 使用 compile() 配置神经网络的训练方法
    # model.compile(optimizer=优化器,
    #               loss=损失函数,
    #               metrics=["评测指标"])
    model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
                  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
                  metrics=[tf.keras.metrics.sparse_categorical_accuracy])
    
    # 在 fit() 中执行训练过程
    # model.fit(训练集的输入特征, 训练集的标签,
    #           batch_size=, epochs=,
    #           validation_data={测试集的输入特征, 测试集的标签},
    #           validation_split=从训练集中划分多少比例给测试集,
    #           validation_freq=多少次epoch测试一次
    #           )
    model.fit(x_train, y_train,
              batch_size=32, epochs=500,
              validation_split=0.2,
              validation_freq=20)
    
    # 打印出网络的结构和参数统计
    model.summary()
  • 相关阅读:
    [LINUX-05]Linux的进程线程及调度
    如何感性地理解EM算法?
    [LINUX-04]linux进程、调度、线程、进程上下文等几点理解
    centos定时删除log文件
    关于 Nginx 配置的一些疑惑, Nginx 根据cookie 进行rewrite
    oracle中如何创建表的自增ID(通过序列)
    Windows下PHP7/5.6以上版本 如何连接Oracle 12c,并使用PDO
    Tomcat不能访问ln -s软连接文件夹的前因后果
    rm命令删除文件时排除特定文件
    nginx中的url转发
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/13521516.html
Copyright © 2011-2022 走看看