tensorflow 2.0 学习笔记 (二) 自定义损失函数,层,模型构建

测试如下:

import tensorflow as tf
import numpy as np

print(tf.__version__)

class MyLinearLayer(tf.keras.layers.Layer):
    def __init__(self, units , use_relu6 = False):
        super().__init__()
        self.units = units
        self.use_relu6 = use_relu6
        if(self.use_relu6):
            self.relu6 = tf.keras.layers.ReLU(max_value=6)

    def build(self, input_shape):     # input_shape 是一个 TensorShape 类型对象,提供输入的形状
        # 在第一次使用该层的时候调用该部分代码,在这里创建变量可以使得变量的形状自适应输入的形状
        # 而不需要使用者额外指定变量形状。
        # 如果已经可以完全确定变量的形状,也可以在__init__部分创建变量
        self.w = self.add_weight(name='w',
            shape=[input_shape[-1], self.units], initializer=tf.random_uniform_initializer())

        #TODO
        self.b = self.add_variable(name='b',
            shape=[self.units], initializer=tf.zeros_initializer())

    def call(self, inputs):
        y_pred = tf.matmul(inputs, self.w) + self.b
        y_pred = y_pred * 10
        y_pred = self.relu6(y_pred)
        return y_pred

#用类的方式建立模型
class TestModel_1(tf.keras.Model):
    def __init__(self):
        super().__init__()
        # 此处添加初始化代码(包含 call 方法中会用到的层
        self.layer1 = MyLinearLayer(units=10,use_relu6=True)

    def call(self, input):
        # 此处添加模型调用的代码(处理输入并返回输出
        output = self.layer1(input)
        return output

#函数式编程建立模型
def TestModel_2():
    inputs = tf.keras.Input(shape=(2,2) )
    x = tf.keras.layers.Dense(10)(inputs)
    outputs = MyLinearLayer(units=10,use_relu6=True)(x)
    model = tf.keras.Model(inputs, outputs)
    return model

#自定义损失函数,不过这样似乎不太方便传参
class MyLossFn_1(tf.keras.losses.Loss):
    def call(self, y_true, y_pred):
        return tf.reduce_mean(tf.square(y_pred - y_true))

# 这样更方便传参
# 下面 model.compile(loss = MyLossFn_2(my_noise)) 即可
def MyLossFn_2(noise):
    def loss(y_true, y_pred):
        return K.mean(K.square(y_pred - y_true) - K.square(y_true - noise), axis=-1)
    return loss


if __name__ == "__main__":

    input_tensor = tf.constant([ [11.,12.],[33. , 34.]  ])
    my_model_1 = TestModel_1()
    my_model_2 = TestModel_2()
    result_1 = my_model_1(input_tensor)
    result_2 = my_model_2(input_tensor)
    print('result_1',result_1)
    print("result_2",result_2)
    my_model_1.summary()
    my_model_2.summary()

后面就是常规操作了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值