Tf.keras和keras区别:
.导入tensorflow_keras
from tensorflow import keras
导入keras
import keras
1.argmax() 用于计算损失函数,用于计算准确率
tf.argmax(x,1) 按行返回矩阵x最大值的索引
2.tf.equal () 和cast配合用于计算准确率
匹配函数内两个式子的结果是否相等,相等则返回true
3.tf.cast() 将bool值转化为浮点数,和eual用于计算准确率
tf.cast(x,"float") x=true 返回 1;x=false 返回0
4.tf.placeholder() 先占位,后初始化(tf.Variable())
传入数据类型,数据的维度 tf.placeholder("float",[None,x]) x是输入数据维度
然后使用tf.Variable()初始化
5.tf.nn.sigmoid() 激活函数,用于计算前向传播
tf.nn.sigmoid(tf.add(tf.matmul(x,w),b)) x时输入矩阵,w是权重矩阵,b是输出矩阵
6.tf.nn.softmax_cross_entropy_with_logits() 交叉熵损失,用于计算反向传播
tf.nn.softmax_cross_entropy_with_logits(pred,label) pred是模型的预测值,label是数据的标签
tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,label))计算一个批次内的平均值
7.tf.random_normal()用于生成卷积层权重,全连接层权重
tf.Variable(tf.random_normal([w,h,c_in,c_out])) w 卷积核的宽;h 卷积核的高;c_in输入维度,c_out输出维度
tf.Variable(tf.random_normal([输入维度,输出维度]))
8.tf.reshape() 将输入格式转化为tensorflow支持的格式
tf.reshape(input,[batchsize,h,w,c]) 通常batchsize=-1 让tf自己算
9.tf.nn.con2d() 对输入进行卷积
tf.nn.conv2d(输入,卷积核参数,strides=[],padding)
卷积核参数 [w,h,c_cin,c_out]
strides [batchsize,w,h,channel] 通常w和h 改stride,batchsize和channel的stride不改
padding same or vald same表示进行填充 vald表示不进行填充
10.print(help()) 输出函数的帮助文档
11.tf.nn.max_pool(输入,ksize,strides,padding) 进行最大池化
输入:上一层的输出
strides:[batchsize,w,h,channel]
padding: same or vald
12.saver.save() 保存模型 与 saver.restore() 读取模型配合使用
第一个参数是保存的模型
第二个参数是保存的路径
saver = tf.train.Saver()
with tf.Session() as sess:
saver_path = saver.save(sess,"xx.ckpt")
saver.restore(sess,"xx.ckpt")
13.plt.matshow()可以可视化网络
14.scope.reuse_variables()变量共享:类似于python的赋值操作,不同变量名指向同一块内存
tf.variable_scope() as scope:
scope.reuse_variables()
15..numpy() tensor转numpy
X.numpy() X是tensor
16.plt展示一张图像:
def show_single_image(img_arr):
#img_arr 是图像的numpy数组
#cmap默认是RGB,假如是灰度图 将cmap='binary'
plt.imshow(img_arr,cmap="")
plt.show()
17. tf.keras.Sequential()用于构建模型
model = keras.models.Sequential()
#添加输入层 此处以28*28大小的图片为例
model.add(keras.layers.Flatten(input_shape=[28,28]))
model.add(keras.layers.Dense(输出维度(int类型),activation='relu'))
model.add(keras.layers.Dense(输出的维度(int类型),activation = "softmax")) #softmax将向量转化为概率分布
或者以列表的形式构建
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dense(300,activation='relu'),
keras.layers.Dense(100,activation='relu'),
keras.layers.Dense(10,activation='softmax')
])
18. keras.layers.Flatten() 展平数组为一维,用于模型等待输入
model.add(keras.layers.Flatten(input_shape[28,28]))
19.model.compile(loss="",optimizer = "",metrics = []) 编译模型
#参数有损失函数loss 比如loss = "sparse_categorical_crossentropy"
什么时候需要sparse
当标签是个数的时候 就是用sparse_categorical_crossentropy
当标签不是个数的时候 使用categorical_crossentropy
20.model.summary() 用在model.compile()之后,展示模型的结构
21.可视化history
def plot_learning_curves(history):
#history=model.fit(x_train,y_train,epochs=10,validation_data = (x_valid,y_valid))
pd.DataFrame(history.history).plot(figsize=(0,5))
plt.grid(True) #显示网格
plt.gca().set_ylim(0,1) #设置坐标轴范围
plt.show()
plot_learning_curves(history)
22.callbacks 是一系列函数 包含modelcheckpoint,tensorboard,earlystopping等 是对训练过程中的一些量进行监听 一般添加在model.fit
使用方法是定义一个callbacks的数组,在model.fit传入数组
callbacks= []
history = model.fiit(x_train,y_train,epochs=10,validation_data = (x_valid,y_valid),callbacks = callbacks)
Tensorboard需要文件夹 , modelcheckpoint需要文件名
logdir = '路径名'
callbacks = [
keras.callbacks.Tensorboard(logdir),
keras.callbacks.ModelCheckpont(output_model_filee,save_best_only = True)
]
查看tensorboard的方法
在terminal 输入 tensorboard --lodir=文件夹名字
然后把terminal返回的网址用浏览器打开
earlystoping 参数解读
monitor 关注的指标,一般是验证集精度
min_delta : 如果上次训练的结果和这次训练的结果差距比阈值要小 就停止训练
patience :连续n次差距比min_delta小,就早停
callbacks=[keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)]
23.keras.layers.BatchNormalization()
批归一化:什么是批归一化,就是把每层的输入都归一化,目的是便于随机梯度下降算法收敛
一般直接加在keras.models.Sequential()里面
model.add(keras.layers.BatchNormalization())
24.selu函数,自带归一化功能 用法是传给dense的activation
model.add(keras.layers.Dense(10,activation="selu"))
25.dropout 一般只有最后几层加dropout
model.add(keras.layers.AlphaDropout(rate=0.5)) #一般都是0.5
alphadropout 均值和方差不变 ,归一化性质也不变
26.keras.models.Model() 作用是函数式api定义完模型后固化模型
model=keras.models.Model(inputs= ,outputs=)
27.模型的子类api 一般需要继承keras.models.Model
定义模型
class WideDeepModel(keras.models.Model):
def __init__(self):
super(WideDeepModel,self).__init__()
#定义模型的层次
self.hidden1_layer = keras.layers.Dense(30,activation="relu")
self.hidden2_layer = keras.lagers.Dense(30,activation = 'relu')
def call(self,input):
#在call函数完成模型的前向计算
hidden1 = self.hidden1_layer(input)
hidden2 = self.hidden2_layer(hidden1)
concat = keras.layers.concatenate([input,hidden2])
out = self.output_layer(concat)
return output
定义完模型后使用模型
model = WideDeepModel()
model.build(input_shape = (None,特征数))
28.模型实现多输入
修改模型,传入输入的列表
input_wide = keras.layers.Input(shape=[5]) #选择前五个特征作为wide的输入
input_deep = keras.layers.Input(shape=[6]) #选择后六个特征作为deep的输入
hidden1 = keras.layers.Dense(30,activation='relu')(input_deep)
hidden2 = keras.layers.Dense(30,activation='relu')(hidden1)
concat = keras.layers.concatenate([input_wide,hidden2])
output = keras.layers.Dense(1)(concat)
model= keras.models.Model(inputs=[input_wide,input_deep],outputs = [output])
修改fit 传入输入的列表
x_train_wide = x_train[:,:5]
x_train_deep = x_train[:,2:]
x_valid_wide = x_valid[:,:5]
x_valid_deep = x_valid[:,2:]
x_test_wide = x_test[:,:5]
x_test_deep = x_test[:,2:]
history = model.fit([x_tran_wide,x_train_deep],y_train,valid_data=([x_valid_wide = x_valid[:,:5],
x_valid_deep = x_valid[:,2:]],y_valid),
epochs = 1,callbacks=callbacks)
修改模型验证函数
model.evaluate([x_test_wide,x_test_deep],y_test)
29.模型实现多输出
一般用于多任务学习
output =
output2=
model.fit([标签1,标签2])
model.evaluate([测试标签1,测试标签2])
30.超参数搜索
常见的超参数
网络结构参数:网络的层数,每层的宽度,每层的激活函数
训练参数:baatch_size,学习率,学习率衰减算法