使用张量流规范化训练的数据



这是来自TensorFlow网站的代码,但解释不好,

normalization_layer = tf.keras.layers.Rescaling(1./255)
train_data = train_data.map(lambda x, y: (normalization_layer(x), y)) # Where x—images, y—labels.

我知道这段代码的目标是规范化数据并使其介于 0 和 1 之间而不是 0 到 255 之间,但我需要了解 lambda 在这里是什么意思。

我认为最好的解释方法是看一个更简单的例子:

list(map(lambda n: n * 3, [1, 2, 3, 4, 5]))
>> [3, 6, 9, 12, 15]

在这种情况下,您将应用于列表中的每个(因为map)元素n[1, 2, 3, 4, 5]相同的操作n * 3

在您的特定情况下,它有点复杂,因为您有两个变量。发生的情况是,对于train_data的每一对(x, y),您都按原样保留y,并将规范化应用于x

更新,有关什么是 lambda 的更多信息。

该站点提供了很好的示例和map函数中使用的lambda的良好定义,例如您的情况:

lambda 表达式是一种内联创建小函数的方法, 没有定义的所有语法。

lambda 的代码通常是单个表达式,没有 变量或 if 语句,并且不使用"return"。Lambda 是 非常适合您有一个简短的计算来内联编写的地方。

我假设train_data是一个tf.dataset

tf.dataset中的每个元素都以X元组的形式存储,并y像这样(X,y)的值。

要访问 python 中元组中的每个元素,您可以执行

for X,y in tuple_list:
print(X)
print(y)

这基本上就是maplambdatf.dataset中所做的

这就是地图函数内部发生的情况

  • 为列车数据分配 X
  • 图像
  • 为训练数据的 Y 标签分配 y
  • 您创建一个新元组,其中 x 变为normalization_layer(x),y 保持y
  • 这是针对train_data中的每个示例完成
  • 这被反馈并存储在train_data中(因为您正在覆盖变量)

有关 Lambda 函数在 Python 中通常如何工作的更多信息,请参阅此处。将特别提请注意一般的 lambda 语法

lambda args: expression

最新更新