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