2020-07-11

Keras 如何创建一个 Model ?

第一次学耍keras还是在18年9月份,一晃两年已经过去了,当时把keras官网的API文档刷了好几遍,现在回去看官网(keras.io)已经建的有模有样了,随着DL、RL的发展还新增了许多API。

现在的keras,貌似已经跟tensorflow深度集成了,连官网上tutorials里导包的方式都从import keras变成from tensorflow import keras hh。

官网给的导包方式已经变成了:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

最经典的方式就是Sequential Model序列模型,初始化一个Sequential类再往里边add各种Layers,最后compile然后fit
这种方法的缺点是没有办法处理多输入和多输出问题。

由此引出了函数式API

inputs = keras.Input(shape=(28, 28))
x = layers.experimental.preprocessing.Rescaling(1.0 / 255)(inputs)
x = layers.Flatten()(x)
x = layers.Dense(128, activation="relu")(x)
x = layers.Dense(128, activation="relu")(x)
outputs = layers.Dense(10, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

再一个新的,就是tf给出了类似Pytorch的nn.Module基类用来声明一个network。

tf.keras.Model

上面这是一个类哦,有两种方式可以来实例化一个tf.keras.Model

class MyModel(tf.keras.Model):

  def __init__(self):
    super(MyModel, self).__init__()
    self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
    self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)

  def call(self, inputs):
    x = self.dense1(inputs)
    return self.dense2(x)

model = MyModel()

再一个就是tf.keras.Model本身(应该)实现了一个__call__方法,接收inputs, outputs, name三个参数(这其实就是函数式API)


几个新特点:

  • tf自带的dataset进行训练:
dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(batch_size)
history = model.fit(dataset, epochs=1)
  • 超参数调节kerastuner
def build_model(hp):
    inputs = keras.Input(shape=(784,))
    x = layers.Dense(
        units=hp.Int('units', min_value=32, max_value=512, step=32),
        activation='relu'))(inputs)
    outputs = layers.Dense(10, activation='softmax')(x)
    model = keras.Model(inputs, outputs)
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate',
                      values=[1e-2, 1e-3, 1e-4])),
        loss='sparse_categorical_crossentropy',
        metrics=['accuracy'])
    return model

import kerastuner

tuner = kerastuner.tuners.Hyperband(
  build_model,
  objective='val_loss',
  max_epochs=100,
  max_trials=200,
  executions_per_trial=2,
  directory='my_dir')

tuner.search(dataset, validation_data=val_dataset)
models = tuner.get_best_models(num_models=2)
tuner.results_summary()

最后,如果想清空所有keras的模型数据(参数、配置等)

keras.backend.clear_session()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值