【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()

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM