В настоящее время я работаю с широким и глубоким классификатором в tf1.15 (DNNLinearCombinedClassifier) и определил следующую функцию для добавления случайного шума к меткам:
def add_random_noise(labels):
labels = tf.dtypes.cast(labels, tf.float32)
rnd_noise = tf.random.uniform(tf.shape(labels))
return tf.add(labels, tf.math.multiply_no_nan(0.05, rnd_noise))
Затем эта функция применяется к набор данных с использованием map
и применяется только к целевому столбцу. Однако, когда я обучаю свою модель, она генерирует следующий результат:
(0) Invalid argument: assertion failed: [Labels must <= n_classes - 1] [Condition x <= y did not hold element-wise:] [x (head/labels:0) = ] [[0.00486446638][0.0133116841][0.0143840136]...] [y (head/assert_range/Const:0) = ] [1]
Насколько я понимаю, DNNLinearCombinedClassifier
вычисляет количество уникальных значений в target и генерирует ошибку из-за разницы между n_classes и количество уникальных значений. Я просмотрел документацию DNNLinearCombinedEstimator
, но он использует MSE как потерю, и я определенно хотел бы обучить свою модель, используя кросс-энтропию, как это сделано в DNNLinearCombinedClassifier
. Я хотел бы спросить вас, есть ли способ использовать широкий и глубокий классификатор с этим возмущенным столбцом меток и перекрестной энтропией в качестве моей функции потерь при обучении.