是否可以有一个 returns 数组(或张量)而不是数字的度量?
Is it possible to have a metric that returns an array (or tensor) rather than a number?
我有一个输出为 NxM
的神经网络,其中 N
是批量大小,M
是网络需要进行预测的输出数量。我想为网络的每个 M
输出计算一个度量,即在批处理的所有实例中,但分别为每个 M
输出计算一个度量,这样就会有 M
该指标的值。我尝试按如下方式创建自定义指标。
def my_metric(y_true, y_pred):
return [3.1, 5.2] # a list of dummy values
然后把这个metric传给模型的compile
方法的metric列表,然后Keras输出一个数,就是3.1
和5.2
的平均值(在在这种情况下,(3.1 + 5.2)/2 = 4.15
) 而不是打印实际列表。那么,有没有一种方法可以 returning 并打印一个列表(或 numpy 数组)作为度量?当然,在我的具体情况下,我不会 return 上面示例中的虚拟列表,但我的自定义指标更复杂。
每 M 做一个指标。
一个输出的工作代码:
from keras.layers import Dense, Input
from keras.models import Model
import keras.backend as K
import numpy as np
inputs = Input((5,))
outputs = Dense(3)(inputs)
model = Model(inputs, outputs)
def metricWrapper(m):
def meanMetric(true, pred):
return pred[:, m]
meanMetric.__name__ = 'meanMetric_' + str(m)
return meanMetric
metrics = [metricWrapper(m) for m in range(3)]
model.compile(loss='mse', metrics=metrics, optimizer='adam')
model.fit(np.random.rand(10,5), np.zeros((10,3)))
我有一个输出为 NxM
的神经网络,其中 N
是批量大小,M
是网络需要进行预测的输出数量。我想为网络的每个 M
输出计算一个度量,即在批处理的所有实例中,但分别为每个 M
输出计算一个度量,这样就会有 M
该指标的值。我尝试按如下方式创建自定义指标。
def my_metric(y_true, y_pred):
return [3.1, 5.2] # a list of dummy values
然后把这个metric传给模型的compile
方法的metric列表,然后Keras输出一个数,就是3.1
和5.2
的平均值(在在这种情况下,(3.1 + 5.2)/2 = 4.15
) 而不是打印实际列表。那么,有没有一种方法可以 returning 并打印一个列表(或 numpy 数组)作为度量?当然,在我的具体情况下,我不会 return 上面示例中的虚拟列表,但我的自定义指标更复杂。
每 M 做一个指标。
一个输出的工作代码:
from keras.layers import Dense, Input
from keras.models import Model
import keras.backend as K
import numpy as np
inputs = Input((5,))
outputs = Dense(3)(inputs)
model = Model(inputs, outputs)
def metricWrapper(m):
def meanMetric(true, pred):
return pred[:, m]
meanMetric.__name__ = 'meanMetric_' + str(m)
return meanMetric
metrics = [metricWrapper(m) for m in range(3)]
model.compile(loss='mse', metrics=metrics, optimizer='adam')
model.fit(np.random.rand(10,5), np.zeros((10,3)))