zoukankan      html  css  js  c++  java
  • [TensorFlow 2.0] Keras 简介

    Keras 是一个用于构建和训练深度学习模型的高阶 API。它可用于快速设计原型、高级研究和生产。

    keras的3个优点: 方便用户使用、模块化和可组合、易于扩展

    简单点说就是,简单、好用、快(构建)

    引用方法:

    import tensorflow as tf
    from tensorflow.keras import layers
    

    简单构建一个模型

    先上代码

    input_x = tf.keras.Input(shape=(72,))
    hidden1 = layers.Dense(32, activation='relu')(input_x)
    hidden2 = layers.Dense(16, activation='relu')(hidden1)
    pred = layers.Dense(10, activation='softmax')(hidden2)
    
    model = tf.keras.Model(inputs=input_x, outputs=pred)
    model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
                 loss=tf.keras.losses.categorical_crossentropy,
                 metrics=['accuracy'])
    model.fit(train_x, train_y, batch_size=32, epochs=5)
    

    tf.keras.Input

    实例化一个 Keras tensor.

    doc:
    https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/Input

    方法定义如下:

    tf.keras.Input(
        shape=None,
        batch_size=None,
        name=None,
        dtype=None,
        sparse=False,
        tensor=None,
        **kwargs
    )
    

    tf.keras.layers.Dense

    定义你的神经网络
    这里官方在文档里加了一个 “densely-connected”来形容

    doc:
    https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/Dense

    tf.keras.Model

    Model groups layers into an object with training and inference features.

    额,不知道该怎么翻译了

    我的理解就是把你的之前定义的网络给链接起来
    跟上上面的代码可能不太好理解,等看后面把模型按照面向对象的思想构建的时候,就方便理解了。

    当然,你可以自己去看下文档
    doc:
    https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/Model

    tf.keras.Model.compile

    配置模型训练时的相关数据

    配置模型训练时,使用的相关参数。
    比如,学习率、loss 等等

    doc:
    https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/Model#compile

    model.fit

    进行模型训练

    doc:
    https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/Model#fit

    模型-OOP

    通过OOP的思想,进行设计我们的模型
    先看代码

    class MyModel(tf.keras.Model):
        def __init__(self, num_classes=10):
            super(MyModel, self).__init__(name='my_model')
            self.num_classes = num_classes
            self.layer1 = layers.Dense(32, activation='relu')
            self.layer2 = layers.Dense(num_classes, activation='softmax')
        def call(self, inputs):
            h1 = self.layer1(inputs)
            out = self.layer2(h1)
            return out
        
        def compute_output_shape(self, input_shape):
            shape = tf.TensorShape(input_shape).as_list()
            shape[-1] = self.num_classes
            return tf.TensorShape(shape)
    
    model = MyModel(num_classes=10)
    model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
                 loss=tf.keras.losses.categorical_crossentropy,
                 metrics=['accuracy'])
    
    model.fit(train_x, train_y, batch_size=16, epochs=5)
    

    如果我们需要通过类来构造我们的模型,那么以下几点是必须的
    1.继承tf.keras.Model
    2.在__init__中调用以下父类,并构造我们的模型

    super(MyModel, self).__init__(name='my_model')
    self.num_classes = num_classes
    self.layer1 = layers.Dense(32, activation='relu')
    self.layer2 = layers.Dense(num_classes, activation='softmax')
    

    3.在call中实现forward
    4.compute_output_shape这个方法,在文档中,说明只有当模型修改了输入数据的形状时,才需要进行定义,否则没有必要。
    但具体的效果,没有找到样例来参考。如果有懂得大神,希望举个例子。

    模型保存

    单独保存权重

    model.save_weights('./weights/model')
    model.load_weights('./weights/model')
    model.save_weights('./model.h5')
    model.load_weights('./model.h5')
    

    单独保存模型结构

    #json
    model.to_json()
    #yam
    model.to_yaml()
    

    保存整个模型

    model.save('all_model.h5')
    
  • 相关阅读:
    oracle新建用户赋权限
    Linux配置tomcat自动启动
    java白皮书关键术语
    sql中exists和not exists的用法
    db2用户、权限相关命令
    面试问题
    能ping通,但是打不开网页
    kali linux的错误
    virtualbox display size
    Jetson tk1 安装 CUDA,ROS,OpenCV和kinect2以及刷机以及ssh远程控制
  • 原文地址:https://www.cnblogs.com/zfcode/p/TensorFlow-20-Keras-jian-jie.html
Copyright © 2011-2022 走看看