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()