六步法
import
对各种库的导入
import tensorflow as tf
import numpy as np
train,test
对数据进行提取,划分出数据集和测试集
model = tf.keras.models.Sequential
model = 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()
class MyModel(Model) model = MyModel()
上面的网络结构只能是顺序的,不能创建跳跃的非顺序的网络结构,所以可以使用类class创建神经网络结构
class MyModel(Model):
def __init__(self):
super(MyModel,self).__init__()
# 定义网络结构块
def call(self,x):
# 调用网络结构快,实现前向传播
return y
model = MyModel()
model.compile
配置训练神经网络的训练方法
model.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]
model.fit
执行训练过程
model.fit(训练集的输入特征,训练集的标签,
batch_size= ,
epochs=,
validation_data=(测试机的输入特征,测试机的标签),
validation_split=从训练集划分多少比例给测试机,
validation_freq=多少次epoch测试一次)
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(16)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3,activation="softmax",kernel_regularizer=tf.keras.regularizers.l2())
])
'''
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
class IrisModel(Model):
def __init__(self):
super(IrisModel,self).__init__()
self.dl = Dense(3,activation='sigmoid',kernel_regularizer=tf.keras.regularizers.l2())
def call(self,x):
y = self.dl(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()