Tensorflow2.0学习笔记-使用API搭建神经网络

使用Tensorflow的API搭建神经网络

1. 顺序搭建神经网络结构

顺序搭建神经网络一般分为六步:
 (1)加载相关模块。(import)
 (2)指定训练集的输入特征和标签。(train,test)
 (3)搭建网络结构,逐层描述每层网络。(model = tf.keras.model.Sequential)
    其中 tf.keras.models.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()
 (4)配置训练方法,包括优化器、损失函数和评测指标。(model.compile):
     model.compeile(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),其中False表示没有经过概率分布的输出。
     ‘Metrics’可选:
      ‘accuracy’:表示输入标签和输出标签都是数值,如y_[1],y[1]
      ‘categorical_accuracy’:输入标签和输出标签都是独热码(概率分布),如y_=[0,1,0],y=[0.256,0.695,0.048]
      ‘sparse_categorical_accuracy’:输入标签是输出标签是独热码(概率分布),如y_=[1],y=[0.256,0.695,0.048]
 (5)执行训练过程。(model.fit)
    model.fit(训练集的输入特征,训练集的标签,batch_size=喂入神经的样本数,epochs=,validation_data=(测测试集的输入特征,测试集的标签),validation_split=从训练集划分多少比例给测试集,validation_freq=多少次训练测试一次测试集)
 (6)打印出网络结构和参数统计。 (model.summary)
对应步骤使用方法:

#  加载对应模块
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())
])
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()

输出结果:

.... .....
32/120 [=======>......................] - ETA: 0s - loss: 0.2907 - sparse_categorical_accuracy: 0.9688
120/120 [==============================] - 0s 208us/sample - loss: 0.4425 - sparse_categorical_accuracy: 0.8583 - val_loss: 0.3130 - val_sparse_categorical_accuracy: 0.9667
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                multiple                  15        
=================================================================
Total params: 15 #  其中params的个数 = (输入数据的维度+1)X 神经元个数,加1的原因是因为每个神经元都有一个bias
Trainable params: 15
Non-trainable params: 0
_________________________________________________________________

Process finished with exit code 0
2. 使用class搭建神经网络结构

使用类进行搭建神经网络的代码,可以写出一些非顺序网络结构,代码如下:

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
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)

#  增加类,进行调用
class IrisModel(Model):
    def __init__(self):
        super(IrisModel, self).__init__()
        self.d1 = Dense(3, activation='sigmoid', kernel_regularizer=tf.keras.regularizers.l2())

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


model = IrisModel()

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值