将张量转换为numpy数组的简单方法,而在TF 2.2中不使用急切模式

问题描述 投票:0回答:1

我无法找到一种简单的方法来将张量转换为NumPy数组而不启用eager模式,这提供了一种不错的.numpy()方法,但同时也减慢了我的模型训练速度。

非常感谢您的建议。对于上下文,我正在为TensorFlow模型编写一个自定义指标,该指标依赖于scikit学习功能,该功能仅需要numpy数组。

我尝试用np.array()包装张量,这会引发未实现的错误。也给了session和.eval()一个机会,但也没有使它正常工作,对于这个简单的工作来说似乎太多了。

我的具体错误:NotImplementedError:无法将符号张量(model_17 / dense_17 / Sigmoid:0)转换为numpy数组。

# Custom metric
def accuracy_ml(y_true, y_pred):
  return accuracy_score(y_true, np.round(y_pred)) # ERROR here feeding tensor to sklearn function

# Model
cnn = simple_model(input_shape=(224, 224, 3),
                   num_classes=10,
                   base_model = base_ResNet101)

lr = 1e-2
loss_fn = tf.keras.losses.BinaryCrossentropy()
metrics = [accuracy_ml]
cnn.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr),
            loss=loss_fn,
            metrics=metrics)

# Simple baseline eval that fails
validation_steps=17
loss0, accuracy0 = cnn.evaluate(validation_batches, steps = validation_steps)
numpy tensorflow keras
1个回答
0
投票

用tf.numpy_function()包装我的NumPy指标即可解决。 https://www.tensorflow.org/api_docs/python/tf/numpy_function

© www.soinside.com 2019 - 2024. All rights reserved.