Keras有两种类型的模型,tf.keras.Sequential 和 函数式模型(Model)
tf.keras 可以运行任何keras兼容的代码,但要注意版本是否匹配,保存模型默认采用checkpoint format方式,也可以传递save_format=’h5’来使用HDF5。
最常见的模型是层的堆叠:tf.keras.Sequential,层的线性叠加。
TensorFlow模型构建之tf.keras.Sequential() - 图1

别名:tf.keras.models.Sequential

1 选择模型(选择 Sequential)

  1. model = Sequential()

2 网络构建

  1. model.add(Dense(500,input_shape=(784,))) # 输入层,28*28=784
  2. model.add(Activation('tanh')) # 激活函数是tanh
  3. model.add(Dropout(0.5)) # 采用50%的dropout
  4. #model.add(tf.keras.layers.Dense(512, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.02)))
  5. # tf.keras.layers.Dense(神经元个数, activation="激活函数", kernel_regularizer=哪种正则化)
  6. # 激活函数可以选择:“relu”,“softmax”,“sigmoid”,“tanh”(以字符串给出)
  7. # 正则化可以选择:
  8. # tf.keras.regularizers.l1()

3 编译

  1. sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) # 优化函数,设定学习率(lr)等参数
  2. model.compile(loss='categorical_crossentropy', optimizer=sgd, class_mode='categorical') # 使用交叉熵作为loss函数
  3. model.compile(optimizer=优化器, loss=损失函数, metrics=["评测指标"])
  4. 优化器可以是字符串形式给出的优化器名字:“sgd”,“adagrad”,“adadelta”,“adam
  5. 还可以是函数形式:
  6. tf.keras.optimizers.SGD(lr=学习率, momentum=动量参数)
  7. tf.keras.optimizers.Adagrad(lr=学习率)
  8. tf.keras.optimizers.Adadelta(lr=学习率)
  9. tf.keras.optimizers.Adam(lr=学习率, beta_1=0.9, beta_2=0.999)
  10. loss 可以是字符串给出的损失函数名字:“mse”,“sparse_categorical_crossentropy
  11. 也可以是函数形式:
  12. tf.keras.losses.MSE()
  13. tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
  14. 有些神经网络的输出是经过了softmax函数的概率分布,有些则不经概率分布直接输出。
  15. 可以认为 from_logits 这个参数是在询问:是否是原始输出,即没有经过概率分布的输出。
  16. 如果神经网络预测结果输出前经过了概率分布,写False
  17. 如果神经网络预测结果输出前没有经过概率分布,写True
  18. metrics 告知网络评测指标:
  19. y_:标签,y:预测结果
  20. accuracy”:y_y都是以数字形式给出
  21. categorical_accuracy”:y_y都是以独热码(概率分布)的形式给出
  22. sparse_categorical_accuracy”:y_以数值形式给出,y以独热码形式给出

4 训练

  1. model.fit(X_train,Y_train,batch_size=200,epochs=50,shuffle=True,verbose=0,validation_split=0.3)
  2. model.evaluate(X_test, Y_test, batch_size=200, verbose=0)
  3. model.fit(训练集的输入特征, 训练集的标签,
  4. batch_size=, epochs=,
  5. validation_data=(测试集的输入特征, 测试集的标签),
  6. validation_split=从训练集中划分多少比例给测试集,
  7. validation_freq=多少次epoch测试一次 )
  8. validation_datavalidation_split 二选其一

5 输出

  1. result = model.predict(X_test,batch_size=200,verbose=0)

tf.keras.models.Sequential 中的方法:

  • add(layer) 添加层
    在层堆栈的顶部添加层实例
  • compile 模型配置

    1. compile(
    2. optimizer='rmsprop', # 字符串(优化器的名称)或优化器实例
    3. loss=None, # 损失函数,如果模型有多个输出,您可以通过传递字典或损失列表来对每个输出
    4. # 使用不同的损失,由模型最小化的损失值将是所有独立损失的总和。
    5. metrics=None, # 在训练和测试期间,模型要评估的度量标准列表,通常将使用metrics=['accuracy']。
    6. # 要为一个多输出模型的不同输出指定不同的度量,可以传递一个字典,例如metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。
    7. # 还可以传递矩阵列表(len = len(输出)),比如metrics=[[accuracy'], ['accuracy', 'mse'],或者metrics=['accuracy', ['accuracy', 'mse']]。
    8. loss_weights=None, # 指定标量系数(Python浮点数)的可选列表或字典,以对不同模型输出的损失贡献进行加权。
    9. sample_weight_mode=None, # 如果需要按时间步长进行样本加权(2D加权),请将其设置为“时间”。没有默认的采样权值(1D)。
    10. weighted_metrics=None, # 在训练和测试期间,将通过sample_weight或class_weight评估和加权的度量列表。
    11. target_tensors=None, # 默认情况下,Keras将为模型的目标创建占位符,这些占位符将在训练期间与目标数据一起提供。
    12. # 相反,如果您想使用自己的目标张量(反过来,Keras在训练时不会期望这些目标的外部Numpy数据),可以通过target_tensors参数指定它们。
    13. distribute=None, # 在TF 2.0中不支持
    14. **kwargs # 任何额外的参数
    15. )
  • evaluate 评价

    1. evaluate(
    2. x=None, # 输入值
    3. y=None, # 目标值
    4. batch_size=None, # 每次梯度更新的样本数
    5. verbose=1,
    6. sample_weight=None, # 用于加权损失函数,在这种情况下,您应该确保在compile()中指定sample_weight_mode="temporal"。
    7. # 当x是一个数据集时,不支持此参数,而是将示例权重作为x的第三个元素传递。
    8. steps=None, # 样品批次数
    9. callbacks=None, # 回调
    10. max_queue_size=10, # 生成器队列的最大大小。如果未指定,max_queue_size将默认为10。
    11. workers=1, # 使用基于进程的线程时要向上旋转的最大进程数,如果未指定,工人将默认为1。如果为0,将在主线程上执行生成器。
    12. use_multiprocessing=False # 请注意,由于此实现依赖于多进程,因此不应该将非picklable参数传递给生成器,因为它们不能轻松传递给子进程。
    13. )

    返回: metrics_names将为标量输出提供显示标签。

  • fit

    1. fit(
    2. x=None,
    3. y=None,
    4. batch_size=None, # 每次梯度更新的样本数
    5. epochs=1, # 训练模型的迭代数
    6. verbose=1,
    7. callbacks=None,
    8. validation_split=0.0, # 将训练数据的一部分用作验证数据
    9. validation_data=None, # 用于评估损失的数据和每个epoch结束时的任何模型度量。模型不会根据这些数据进行训练。validation_data将覆盖validation_split。
    10. shuffle=True, # 在每个epoch之前对训练数据进行洗牌
    11. class_weight=None,
    12. sample_weight=None,
    13. initial_epoch=0, # 开始训练的时间(对于恢复之前的训练很有用)。
    14. steps_per_epoch=None,
    15. validation_steps=None,
    16. validation_freq=1,
    17. max_queue_size=10,
    18. workers=1,
    19. use_multiprocessing=False,
    20. **kwargs
    21. )

    fit 函数存在返回值,可有 history = model.fit… 中间运行的数据结果

  • get_layer 根据层的名称(惟一的)或索引检索层

    1. get_layer(
    2. name=None,
    3. index=None
    4. )
  • load_weights 从TensorFlow或HDF5权值文件加载所有层权值

    1. load_weights(
    2. filepath,
    3. by_name=False,
    4. skip_mismatch=False
    5. )
  • pop 删除模型中的最后一层。

    1. pop()
  • predict 为输入样本生成输出预测,计算是分批进行的。

    1. predict(
    2. x,
    3. batch_size=None,
    4. verbose=0,
    5. steps=None,
    6. callbacks=None,
    7. max_queue_size=10,
    8. workers=1,
    9. use_multiprocessing=False
    10. )