tensorflow2快速入门 最干教程

Tf.keras和keras区别:

  •        Tf.keras支持基于tf.data的模型训练
  •       Tf.keras支持TPU训练
  •        Tf.keras支持tf.distribution的分布式策略
  •        Tf.keras 可以与tf的额estimator集成
  •       Tf.keras 可以保存为SavedModel 

.导入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用于计算准确率

扫描二维码关注公众号,回复: 13354667 查看本文章

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,学习率,学习率衰减算法

        

猜你喜欢

转载自blog.csdn.net/weixin_45955767/article/details/120532061