美文网首页
TensorFlow2.0 - C2 Guide - 2 Ker

TensorFlow2.0 - C2 Guide - 2 Ker

作者: 左心Chris | 来源:发表于2019-08-14 09:14 被阅读0次

    1 Keras overview

    https://www.tensorflow.org/guide/keras
    建立模型步骤compile fit evaluate predict和输入dataset
    高级方法functional API, subclassing model, custom layer, callbacks
    save and restore, eager execution, distribution

    1.1 Import tf.keras

    from __future__ import absolute_import, division, print_function, unicode_literals
    import tensorflow as tf
    from tensorflow import keras
    

    not uptodate version compared to keras
    defaults to the checkpoint format not HDF5(pass save_format='h5' to use)

    1.2 Build a simple model

    1. 序列模型
    model = tf.keras.Sequential()
    # Adds a densely-connected layer with 64 units to the model:
    model.add(layers.Dense(64, activation='relu'))
    # Add another:
    model.add(layers.Dense(64, activation='relu'))
    # Add a softmax layer with 10 output units:
    model.add(layers.Dense(10, activation='softmax'))
    
    1. 这些层可以配置
      activation激活函数, kernel_initializer和bias_initializer初始化方案, kernel_regularizer和bias_regularizer 正则化方案

    1.3 训练和评估

    model = tf.keras.Sequential([
    # Adds a densely-connected layer with 64 units to the model:
    layers.Dense(64, activation='relu', input_shape=(32,)),
    # Add another:
    layers.Dense(64, activation='relu'),
    # Add a softmax layer with 10 output units:
    layers.Dense(10, activation='softmax')])
    
    model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
    • numpy输入
    model.compile(optimizer=tf.train.AdamOptimizer(0.001),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    

    optimizer: 训练方法,loss:优化函数,metrics:训练监控

    import numpy as np
    
    data = np.random.random((1000, 32))
    labels = np.random.random((1000, 10))
    
    val_data = np.random.random((100, 32))
    val_labels = np.random.random((100, 10))
    
    model.fit(data, labels, epochs=10, batch_size=32,
              validation_data=(val_data, val_labels))
    

    epochs:训练周期(整个输入数据的一次迭代),batch_size:批次大小 (每次iterate用多少数据迭代)
    validation_data:在每个训练周期结束加上显示验证集的数据和指标

    • dataset输入
    # Instantiates a toy dataset instance:
    dataset = tf.data.Dataset.from_tensor_slices((data, labels))
    dataset = dataset.batch(32)
    
    model.fit(dataset, epochs=10)
    
    dataset = tf.data.Dataset.from_tensor_slices((data, labels))
    dataset = dataset.batch(32)
    
    val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels))
    val_dataset = val_dataset.batch(32)
    
    model.fit(dataset, epochs=10,
              validation_data=val_dataset)
    

    评估和预测

    # With Numpy arrays
    data = np.random.random((1000, 32))
    labels = np.random.random((1000, 10))
    
    model.evaluate(data, labels, batch_size=32)
    
    # With a Dataset
    dataset = tf.data.Dataset.from_tensor_slices((data, labels))
    dataset = dataset.batch(32)
    
    model.evaluate(dataset)
    
    result = model.predict(data, batch_size=32)
    print(result.shape)
    

    1.4 构建复杂模型

    1. 函数式API
      Types of models:
      Multi-input
      Multi-output
      Models with shared layers
      Models with non-sequential data flows
    inputs = tf.keras.Input(shape=(32,))  # Returns a placeholder tensor
    
    # A layer instance is callable on a tensor, and returns a tensor.
    x = layers.Dense(64, activation='relu')(inputs)
    x = layers.Dense(64, activation='relu')(x)
    predictions = layers.Dense(10, activation='softmax')(x)
    
    # kernel
    model = tf.keras.Model(inputs=inputs, outputs=predictions)
    
    # The compile step specifies the training configuration.
    model.compile(optimizer=tf.train.RMSPropOptimizer(0.001),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
    # Trains for 5 epochs
    model.fit(data, labels, batch_size=32, epochs=5)
    
    1. Model subclassing
      可以定制自己的model
    class MyModel(tf.keras.Model):
    
      def __init__(self, num_classes=10):
        super(MyModel, self).__init__(name='my_model')
        self.num_classes = num_classes
        # Define your layers here.
        self.dense_1 = layers.Dense(32, activation='relu')
        self.dense_2 = layers.Dense(num_classes, activation='sigmoid')
    
      def call(self, inputs):
        # Define your forward pass here,
        # using layers you previously defined (in `__init__`).
        x = self.dense_1(inputs)
        return self.dense_2(x)
    
    1. Custom layers
      可以定制自己的层
    class MyLayer(layers.Layer):
    
      def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(MyLayer, self).__init__(**kwargs)
    
      def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        self.kernel = self.add_weight(name='kernel',
                                      shape=(input_shape[1], self.output_dim),
                                      initializer='uniform',
                                      trainable=True)
    
      def call(self, inputs):
        return tf.matmul(inputs, self.kernel)
    
      def get_config(self):
        base_config = super(MyLayer, self).get_config()
        base_config['output_dim'] = self.output_dim
        return base_config
    
      @classmethod
      def from_config(cls, config):
        return cls(**config)
    

    1.5 Callbacks

    四种ModelCheckpoint, LearningRateScheduler, EarlyStopping, TensorBoard
    https://www.tensorflow.org/guide/summaries_and_tensorboard

    callbacks = [
      # Interrupt training if `val_loss` stops improving for over 2 epochs
      tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),
      # Write TensorBoard logs to `./logs` directory
      tf.keras.callbacks.TensorBoard(log_dir='./logs')
    ]
    model.fit(data, labels, batch_size=32, epochs=5, callbacks=callbacks,
              validation_data=(val_data, val_labels))
    

    1.6 Save and restore

    save just the weights values
    save just the model configuration
    save the entire model:

    # Create a trivial model
    model = tf.keras.Sequential([
      layers.Dense(64, activation='relu', input_shape=(32,)),
      layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='rmsprop',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    model.fit(data, labels, batch_size=32, epochs=5)
    
    
    # Save entire model to a HDF5 file
    model.save('my_model.h5')
    
    # Recreate the exact same model, including weights and optimizer.
    model = tf.keras.models.load_model('my_model.h5')
    

    1.7 Eager execution

    有利于测试model subclassing和custom layers

    1.8 Distribution

    多GPU

    strategy = tf.distribute.MirroredStrategy()
    
    with strategy.scope():
      model = tf.keras.Sequential()
      model.add(layers.Dense(16, activation='relu', input_shape=(10,)))
      model.add(layers.Dense(1, activation='sigmoid'))
    
      optimizer = tf.keras.optimizers.SGD(0.2)
    
      model.compile(loss='binary_crossentropy', optimizer=optimizer)
    
    model.summary()
    

    2 Keras functional API

    3 Train and evaluate

    3.1 Using buid-in training and evaluation loops

    Specifying a loss, metrics, and an optimizer
    Custom losses/metrics
    training and evaluation from numpy
    training and evaluation from Datasets
    passing data to mulit-input, multi-output models
    Callbacks
    Visualizing loss and metrics during training

    3.2 Using custom training and evaluation loops

    相关文章

      网友评论

          本文标题:TensorFlow2.0 - C2 Guide - 2 Ker

          本文链接:https://www.haomeiwen.com/subject/zvmtdctx.html