tf.keras模块——Input、Model

tf.keras.Input()

  初始化一个keras张量

1

2

3

4

5

6

7

8

9

tf.keras.Input(

    shape=None,

    batch_size=None,

    name=None,

    dtype=None,

    sparse=False,

    tensor=None,

    **kwargs

)

 

1

2

3

4

5

6

7

8

参数:

shape:形状元组(整数),不包括批量大小。例如,shape=(32,)表示预期输入将是32维向量的批次。

batch_size:可选的静态批处理大小(整数)。

name:图层的可选名称字符串。在模型中应该是唯一的(不要重复使用相同的名称两次)。如果没有提供,它将自动生成。

dtype:数据类型由输入预期的,作为字符串(float32,float64,int32...)

sparse:一个布尔值,指定要创建的占位符是否稀疏。

tensor:可选的现有张量以包装到Input图层中。如果设置,该图层将不会创建占位符张量。

**kwargs:不推荐的参数支持。

 

  案例:

1

2

= Input(shape=(32,))

= tf.square(x)

 

 

tf.keras.Model()

  将layers分组为具有训练和推理特征的对象

  两种实例化的方式:

  1 - 使用“API”,从开始,链接层调用以指定模型的正向传递,最后从输入和输出创建模型:

 

1

2

3

4

5

6

import tensorflow as tf

 

inputs = tf.keras.Input(shape=(3,))

= tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)

outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)

model = tf.keras.Model(inputs=inputs, outputs=outputs)

 

  2 - 通过继承Model类:在这种情况下,您应该在__init__定义你的layers,并且应该在call函数里实现模型的正向传递。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import tensorflow as tf

 

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.compile():模型编译

1

2

3

4

5

6

7

8

9

10

11

compile(

    optimizer,---> ['Adadelta''Adagrad''Adam''Adamax''FTRL''NAdam''optimizer''RMSprop''SGD']

    loss=None,

    metrics=None,

    loss_weights=None,

    sample_weight_mode=None,

    weighted_metrics=None,

    target_tensors=None,

    distribute=None,

    **kwargs

)

  参数:

  optimizer: 优化参数,选择范围我们已经在上面的代码块展示了。

  loss: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

BinaryCrossentropy:计算真实标签和预测标签之间的交叉熵损失。

CategoricalCrossentropy:计算标签和预测之间的交叉熵损失。

CategoricalHinge:计算y_true和y_pred之间的分类铰链损失。

CosineSimilarity:计算y_true和y_pred之间的余弦相似度。

Hinge:计算y_true和y_pred之间的铰链损耗。

Huber:计算y_true和y_pred之间的Huber损失。

KLDivergence:计算y_true和y_pred之间的Kullback Leibler差异损失。

LogCosh:计算预测误差的双曲余弦的对数。

Loss:损失基类。

MeanAbsoluteError:计算标签和预测之间的绝对差异的平均值。

MeanAbsolutePercentageError:计算y_true和y_pred之间的平均绝对百分比误差。

MeanSquaredError:计算标签和预测之间的误差平方的平均值。

MeanSquaredLogarithmicError:计算y_true和y_pred之间的均方对数误差。

Poisson:计算y_true和y_pred之间的泊松损失。

Reduction:减少损失的类型。

SparseCategoricalCrossentropy:计算标签和预测之间的交叉熵损失。

SquaredHinge:计算y_true和y_pred之间的平方铰链损耗。

 

  metrics: 训练和测试期间要使用的评估指标。

1

2

3

4

5

1、metrics=['accuracy']

2、多输出模型的不同输出指定不同的度量标准:

     metrics={'output_a''accuracy''output_b': ['accuracy''mse']}

     metrics=[['accuracy'], ['accuracy''mse']]

     metrics=['accuracy', ['accuracy''mse']]

  sample_weight_mode如果您需要进行时间步长样本加权(2D权重),请将

    其设置为"temporal"。 None默认为采样权重(1D)。如果模型具有多个

    输出,则可以sample_weight_mode通过传递字典或模式列表在每个输出上

    使用不同的输出

  weighted_metrics:在训练和测试期间由sample_weight或class_weight评估和加权的指标列表。

 

  tf.keras.Model.evaluate():模型评估

 

1

2

3

4

5

6

7

8

9

10

11

12

evaluate(

    x=None,

    y=None,

    batch_size=None,

    verbose=1,

    sample_weight=None,

    steps=None,

    callbacks=None,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False

)

  参数:

    x: 测试自变量,可以是Numpy数组或数组列表、TensorFlow张量或张量列表、如果模型

        具有命名输入,则dict将输入名称映射到相应的数组/张量、tf.data数据集或数据

        集的迭代、生成器或keras.utils.Sequence实例。

    y: 目标数据,类型同x一样。

    batch_size: 每个批量处理的数据量。整数。默认为32。如果你的数据是 symbolic

        tensors, dataset, dataset iterators, generators, or keras.utils.

        Sequence则不需要指定该参数,因为它会生成batchs.

    verbose: 0, 1,默认为1。日志显示,批量输出,你可以控制输出的间隔。

    steps: 整数或None,每轮迭代的步数。如果x是 tf.data dataset or a dataset iterator,

        and steps is None,则数据将会耗尽为止。

    max_queue_size: 默认为10,生成队列的最大size。

    workers: 进程数。

 

  tf.keras.Model.evaluate_generator():

    在数据生成器上评估模型

1

2

3

4

5

6

7

8

9

evaluate_generator(

    generator,

    steps=None,

    callbacks=None,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False,

    verbose=0

)

  

  tf.keras.Model.fit():在数据上拟合模型

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

fit(

    x=None,

    y=None,

    batch_size=None,

    epochs=1,

    verbose=1,

    callbacks=None,

    validation_split=0.0,

    validation_data=None,

    shuffle=True,

    class_weight=None,

    sample_weight=None,

    initial_epoch=0,

    steps_per_epoch=None,

    validation_steps=None,

    validation_freq=1,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False,

    **kwargs

)

1

  

  参数:
    validation_split: 0,1之间的浮点数。分割部分数据用于验证,其余用于训练。当x

          是dataset, dataset iterator, generator or keras.utils.Sequence时该

          参数不可用。
    validation_data:指定验证集数据:

              (x_val, y_val)、(x_val, y_val, val_sample_weights);
          dataset or a dataset iterator两种数据对于上面两种情况要指定

          validation_steps。
    class_weight: 指定权值分配,可以突出重点关注的类别。(对损失函数加权)
    sample_weight: 样本加权,对损失函数加权,以获得更好的结果。这里可以是numpy

          数组,必须保障shape是和传入数据大小一致。应该确保在compile()中

          指定sample_weight_mode=“temporal”,dataset, dataset iterator,

          generator, or keras.utils.Sequence不支持该参数。
    initial_epoch: 整数。开始训练的epoch(对于恢复以前的训练运行很有用)。
    steps_per_epoch: 每个epoch的迭代步数。
    validation_steps:
    validation_freq: 指定验证的epoch,可以为整数或者列表:如:[1,2,10]。

  tf.keras.Model.fit_generator():

  在数据生成器上拟合模型,可以减少内存消耗

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

fit_generator(

    generator,

    steps_per_epoch=None,

    epochs=1,

    verbose=1,

    callbacks=None,

    validation_data=None,

    validation_steps=None,

    validation_freq=1,

    class_weight=None,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False,

    shuffle=True,

    initial_epoch=0

)

     这里传入的数据必须是生成器(yield),如:

1

2

3

4

5

6

7

8

9

10

11

12

def generate_arrays_from_file(path):

    while 1:

        = open(path)

        for line in f:

            # create numpy arrays of input data

            # and labels, from each line in the file

            x1, x2, y = process_line(line)

            yield ({'input_1': x1, 'input_2': x2}, {'output': y})

        f.close()

 

model.fit_generator(generate_arrays_from_file('/my_file.txt'),

                    steps_per_epoch=10000, epochs=10)

  tf.keras.Model.get_layer():

  获取图层:根据其名称(唯一)或索引检索图层

1

2

3

4

get_layer(

    name=None,

    index=None

)

  tf.keras.Model.load_weights():

  从TensorFlow或HDF5文件加载所有图层权重

1

2

3

4

load_weights(

    filepath,

    by_name=False

)

  tf.keras.Model.predict():预测

1

2

3

4

5

6

7

8

9

10

predict(

    x,

    batch_size=None,

    verbose=0,

    steps=None,

    callbacks=None,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False

)

1

 

    参数:
      x:Numpy数组(或类数组)或数组列表、TensorFlow张量或张量列表、
         数据集或数据集的迭代、生成器或keras.utils.Sequence实例

  tf.keras.Model.predict_generator():

  以生成器传入数据进行预测

1

 

1

2

3

4

5

6

7

8

9

predict_generator(

    generator,

    steps=None,

    callbacks=None,

    max_queue_size=10,

    workers=1,

    use_multiprocessing=False,

    verbose=0

)

  tf.keras.Model.predict_on_batch():

  单批次样本进行预测

1

predict_on_batch(x)

1

 

  tf.keras.Model.test_on_batch():

  单批次样本进行测试

1

2

3

4

5

6

test_on_batch(

    x,

    y=None,

    sample_weight=None,

    reset_metrics=True

)

  tf.keras.Model.train_on_batch():

  单批次样本进行训练

1

2

3

4

5

6

7

train_on_batch(

    x,

    y=None,

    sample_weight=None,

    class_weight=None,

    reset_metrics=True

)

tf.keras.Model.reset_metrics():重置指标的状态

    如果True,返回的指标仅适用于此批次。如果False,指标将在批次之间有状态地累积。

tf.keras.Model.reset_states():

  重置状态,需要连续调用的时候最好使用resets_states()

tf.keras.Model.save():保存模型

1

2

3

4

5

6

save(

    filepath,

    overwrite=True,

    include_optimizer=True,

    save_format=None

)

  将模型保存到Tensorflow SavedModel或单个HDF5文件。

    保存文件包括:

    1、模型体系结构,允许重新实例化模型。

    2、模型权重。

    3、优化器的状态,允许您从中断的位置恢复训练。

 参数:
    filepath: 字符串,模型保存的位置
    overwrite: 是否静默覆盖目标位置的现有文件,或者为用户提供手动提示
    include_optimizer: 如果为True,则将优化器的状态保存在一起
    save_format: 保存的类型,‘tf’,‘h5’,目前tf已经禁用了(tensorflow2.0中)

1

2

3

4

5

6

7

8

from keras.models import load_model

 

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'

del model  # deletes the existing model

 

# returns a compiled model

# identical to the previous one

model = load_model('my_model.h5')

1

 

  tf.keras.Model.save_weights():保存所有图层权重

1

2

3

4

5

save_weights(

    filepath,

    overwrite=True,

    save_format=None

)

  tf.keras.Model.summary():打印网络的字符串摘要

1

2

3

4

5

summary(

    line_length=None,

    positions=None,

    print_fn=None

)

   参数:

    line_length: 打印行的总长度(例如,将其设置为使显示适应不同的终端窗口大小)。

    positions: 每行中日志元素的相对或绝对位置。如果未提供,则默认为[.33, .55, .67, 1.]。

    print_fn: 打印功能。默认为print。它将在摘要的每一行上调用。您可以将其设置为自定义函

      数以捕获字符串摘要。

 

tf.keras.Model.to_json():

 返回包含网络配置的JSON字符串

    要从保存文件JSON加载网络,请使用

       keras.models.model_from_json(json_string, custom_objects={})。

tf.keras.Model.to_yaml():

 返回包含网络配置的yaml字符串

    要从yaml保存文件加载网络,请使用

       keras.models.model_from_yaml(yaml_string, custom_objects={})。

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `tf.keras.Input`是一个用于定义模型输入的函数,它可以用于构建基于Keras的深度学习模型。它的作用是将输入数据的形状(shape)传递给模型,并给这个输入数据一个可读性强的名称。在使用`tf.keras.Input`函数时,需要指定输入数据的形状、数据类型和名称等参数。例如,下面的代码定义了一个输入形状为(32, 32, 3)的float32类型的张量,并命名为`input_tensor`: ```python import tensorflow as tf input_tensor = tf.keras.Input(shape=(32, 32, 3), dtype=tf.float32, name='input_tensor') ``` 在模型构建时,可以使用这个`input_tensor`作为模型的输入。例如,下面的代码构建了一个简单的全连接神经网络模型: ```python x = tf.keras.layers.Flatten()(input_tensor) x = tf.keras.layers.Dense(128, activation='relu')(x) output_tensor = tf.keras.layers.Dense(10, activation='softmax')(x) model = tf.keras.Model(inputs=input_tensor, outputs=output_tensor) ``` 这个模型的输入是`input_tensor`,输出是`output_tensor`。 ### 回答2: tf.keras.Input是TensorFlow中的一个函数,用于定义模型的输入层。 在使用tf.keras建立神经网络模型时,首先我们需要定义模型的输入。tf.keras.Input函数的作用就是为我们提供了一个方便的方法来定义模型的输入层。 它的用法如下: input = tf.keras.Input(shape=(input_shape,)) 其中,shape参数指定了输入层的形状。 具体来说,shape参数是一个元组,描述了输入张量的维度。例如,shape=(32, 32, 3)表示输入张量是一个三维张量,其中宽度为32,高度为32,通道数为3。 通过tf.keras.Input函数定义的输入层本质上是一个占位符,它没有实际的数值,只是用来占位。在模型训练时,我们会利用训练数据填充这个输入层。 在定义完输入层后,我们可以将输入层与其他层连接,构建一个完整的神经网络模型。例如: x = tf.keras.Conv2D(32, (3,3))(input) 这行代码表示将输入层与一个卷积层连接起来,其中卷积层的输出是一个32通道的特征图。 通过tf.keras.Input函数定义的输入层是通过函数式API的方式定义模型的输入。相比于Sequential模型,函数式API更加灵活,可以处理更加复杂的模型结构。 总之,tf.keras.Input函数是TensorFlow中用来定义模型输入层的一个函数,它通过shape参数来指定输入张量的形状,然后与其他层连接构建一个完整的神经网络模型。 ### 回答3: tf.keras.Input是TensorFlow中的一个函数,用于定义Keras模型的输入层。 在Keras中,每个模型都必须有一个输入层。输入层是模型的起点,它接收输入数据,并根据指定的形状将数据转换为张量。tf.keras.Input函数就是用来定义这个输入层的。 tf.keras.Input函数有以下参数: - shape:指定输入数据的形状。它是一个元组或列表,表示输入数据的每个维度的大小。例如,shape=(32,32,3)表示输入数据是一个32x32像素的RGB图像。 - dtype:指定输入数据的数据类型。默认为float32。 - sparse:指定输入是否稀疏。当输入数据是一个稀疏矩阵时,将sparse参数设置为True。默认为False。 - name:给输入层命名的字符串。 使用tf.keras.Input函数定义输入层后,我们可以将其作为Keras模型的第一层。例如: ``` input_layer = tf.keras.Input(shape=(32,32,3)) ``` 定义完输入层后,我们可以使用它作为其他层的输入,通过层与层之间的连接来构建模型。 通过tf.keras.Input函数定义输入层的好处是,我们可以更方便地将输入与其他层连接起来,而不需要明确地指定输入的形状和数据类型。Keras会根据输入层的定义自动识别并应用正确的转换。 总之,tf.keras.Input是TensorFlow中用于定义Keras模型的输入层的函数,它可以方便地定义输入的形状和数据类型,并作为模型的起点,连接其他的层构建整个模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值