激活函数小tips

正则化小tips

神经网络参数优化器

几种优化器的比较

用Tensorflow API:tf.keras搭建网络八

六步法

import

train, test

model = tf.keras.models

Sequentialmodel.compile

# 描述各层的网络结构
Sequentialmodel

    拉直层: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()

# 告知训练时选择的优化器、损失函数、评测指标
model.compile(optimizer =优化器,loss=损失函数metrics =[“准确率")
    Optimizer可选:
        'sgd' or tf.keras.optimizers.SGD (Ir=学习率,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

sequential的平替->class MyModel(Model) model = Mymodel
可应用于跳连的神经网络

1
2
3
4
5
6
class MyModel(Model):
def _init_(self):
super(MyModel,self)._init_()定义网络结构块
def call(self, x):
#调用网络结构块,实现前向传播return y
model = MyModel()

init()定义所需网络结构块
call()写出前向传播

ep:

1
2
3
4
5
6
7
8
9
10
class IrisModel (Model):
def int(self):
super(IrisModel, self).__init__()
self.d1 = Dense (3)

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

自制数据集

搞一堆图片,搞两个文件夹,分别标为train和test,图片大小尽量搞成一样的,搞成灰度图,0-255,
写两个txt分别给train和test打标签,命名方式为id_标签.jpg 标签,如0_5.jpg 5,代表第一个图片表示的5。
写一个generate函数参数分别为path和txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def generateds(path, txt):
f = open(txt, 'r') # 以只读形式打开txt文件
contents = f.readlines() # 读取文件中所有行
f.close() # 关闭txt文件
x, y_ = [], [] # 建立空列表
for content in contents: # 逐行取出
value = content.split() # 以空格分开,图片路径为value[0] , 标签为value[1] , 存入列表
img_path = path + value[0] # 拼出图片路径和文件名
img = Image.open(img_path) # 读入图片
img = np.array(img.convert('L')) # 图片变为8位宽灰度值的np.array格式
img = img / 255. # 数据归一化 (实现预处理)
x.append(img) # 归一化后的数据,贴到列表x
y_.append(value[1]) # 标签贴到列表y_
print('loading : ' + content) # 打印状态提示

x = np.array(x) # 变为np.array格式
y_ = np.array(y_) # 变为np.array格式
y_ = y_.astype(np.int64) # 变为64位整型
return x, y_ # 返回输入特征x,返回标签y_

循环计算过程

ht = tanh(xtwxh+ht-1whh+bh)

yt=softmax(htwhy+by)

LSTM计算过程

GRU计算过程