python - 无法将 'auto' 转换为 dtype float 的 EagerTensor

标签 python tensorflow keras

我创建了一个包含 27 列的数据集。 我创建了一个 Autoencoder 用于异常检测,如下所示:

input_layer = Input(shape=(27,))

x = layers.Dense(20,activation='relu')(input_layer)
x = layers.Dense(14,activation='relu')(x)
x = layers.Dense(8, activation='relu')(x)
x = layers.Dense(14, activation='relu')(x)
x = layers.Dense(20,activation='relu')(x)

output = layers.Dense(27,activation='relu')(x)

AE = keras.models.Model(inputs=input_layer, outputs=output)

optimizer = keras.optimizers.Adam() 

loss_fn = keras.losses.MeanSquaredError

iterator = iter(train_dataset) 
a = iterator.get_next() 
out = AE(a,training=True)
loss_value = loss_fn(a, out)

为什么会出现如下错误?

TypeError: Cannot convert 'auto' to EagerTensor of dtype float

最佳答案

免责声明

这个答案假设我们最初写了:

import tensorflow
from tensorflow import keras

请注意,如果没有任何示例数据,则很难确定这是否适用于您的情况。但是我通过了解以下内容解决了产生相同错误的问题。

解决方案 1:使用 MeanSquaredError 类

出现此问题是因为 keras.losses.MeanSquaredError 是一个类,according to the tensorflow website .因此,您必须首先使用括号 () 对其进行实例化,而不是将其作为函数进行别名化。

因此,下面一行解决了这个问题:

loss_fn = keras.losses.MeanSquaredError()

方案二:使用MSE函数

另一种选择是别名 keras.losses.MSE,它是 keras.metrics.mean_squared_error 的别名,according to this site .如果您查看源代码,您会发现这是一个在任何类定义之外的函数。

因此,下面一行解决了这个问题:

loss_fn = keras.losses.MSE

重要:两种解决方案产生不同的结果

如果输入多于一维,则上述两个解决方案的输出是不同的。第一个产生一个标量,第二个产生一个数组。为了使它们相同,您必须:

  • 在实例化解决方案 1 中的类时传递一个 NONE 类型缩减。损失值现在是一个数组。
loss_fn = keras.losses.MeanSquaredError(reduction=keras.losses.Reduction.NONE)

  • 另外从解决方案 2 中的损失函数的输出中取平均值。损失值现在是一个标量。
loss_value = tensorflow.reduce_mean(loss_fn(a, out))

关于python - 无法将 'auto' 转换为 dtype float 的 EagerTensor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64831510/

相关文章:

python - 如何找到图像中数字的中心坐标

python - 具有可变输入的自动转换器 Keras

python - 如何解释 Keras 中 model.predict() 的输出

python - 将字典中的值从字符串转换为浮点型

java - SHA1withRSA 在 python 中验证?

python selenium - 打印 xpath 值

python - 如何使用 C++ 正确使用 tensorflow 从 YOLO 模型获取输出?

python - 使用扩张因果卷积和 Tensorflow 2.0 进行时间序列预测

javascript - TensorFlow.js 返回类型错误 : Cannot read property 'concat' of undefined when loading models

python - Keras module.summary() 结果 - 'output shape' 中的负维度值