Я пытаюсь создать модель ML в Tensorflow, которая принимает тензор с формой (128,128,12) и выводит тензор с формой (128,128,3), где выходные измерения означают (x, y, sensor_numb X-Y-координаты. Но если я возьму измерение, у меня всегда будет все 3 показания датчиков.
from keras import Input, layers, models
input_data = Input(shape=(128,128,12), name="input_data")
input_mask = Input(shape=(128,128,3), name="input_mask")
output_layer = layers.Conv2D(filters=3, kernel_size=(3,3), padding="same", activation="sigmoid", name="output")(input_data)
output_masked = layers.Multiply(name="masked_output")([output_layer, input_mask])
print(output_masked.shape)
# return input_data, input_mask, output_layer, output_masked
model = models.Model(inputs=input_data, outputs=output_layer)
model_masked = models.Model(inputs=[input_data, input_mask], outputs=output_masked)
model_masked.compile(optimizer="adam", loss="mse")
< /code>
Маска просто содержит те, что в координатах, где я проводил измерения, в противном случае нули. Если это полезно, не было бы проблемы использовать нули в Y_TRUE для получения маски, фактические показания датчика всегда превышают 0. Чтобы решить эту проблему, я решил, что мне нужна функция пользовательской потери, которая вычисляет только потерю для координат, где доступны данные. Я попробовал это: < /p>
from keras import ops
def masked_mse(y_true, y_pred):
mask_value = 0
mask = ops.repeat(
ops.cast(
ops.any(
ops.not_equal(y_true, mask_value),
axis=-1, keepdims=True,
),
"float32"
),
repeats=y_true.shape[-1], axis=-1
)
masked_squared_error = ops.square(mask * (y_pred - y_true))
masked_mse = ops.sum(masked_squared_error, axis=-1) / ops.sum(mask, axis=-1) # results in lots of NaNs
# masked_mse = ops.sum(masked_squared_error, axis=-1) / ops.maximum(ops.sum(mask, axis=-1), 1) # results in lots of zeros
return masked_mse
< /code>
Но я не понимаю, как эта функция потерь применяется во время обучения.
Если вы заметили, я включил два варианта о том, как вычислять masked_mse < /code>.
Первый из них результатов в NANS, где не представлены измерения. Выход на x-y-координату.
во время тренировок, однако, tensorflow регистрирует потерю как одно значение, которое всегда будет NAN.
Я не понимаю, как рассчитывается эта агрегация. Потери и модель обучения для прогнозирования в основном нулей. С сокращением = нет
Это рассчитывает координат MSE. С REDUT = "SUM_OVER_BATCH_SIZE" (по умолчанию) Это рассчитывает одно значение. Это как я должен определить свою функцию потери в маске?
Я пытаюсь создать модель ML в Tensorflow, которая принимает тензор с формой (128,128,12) и выводит тензор с формой (128,128,3), где выходные измерения означают (x, y, sensor_numb X-Y-координаты. Но если я возьму измерение, у меня всегда будет все 3 показания датчиков.[code]from keras import Input, layers, models
model = models.Model(inputs=input_data, outputs=output_layer) model_masked = models.Model(inputs=[input_data, input_mask], outputs=output_masked)
model_masked.compile(optimizer="adam", loss="mse") < /code> Маска просто содержит те, что в координатах, где я проводил измерения, в противном случае нули. Если это полезно, не было бы проблемы использовать нули в Y_TRUE для получения маски, фактические показания датчика всегда превышают 0. Чтобы решить эту проблему, я решил, что мне нужна функция пользовательской потери, которая вычисляет только потерю для координат, где доступны данные. Я попробовал это: < /p> from keras import ops def masked_mse(y_true, y_pred): mask_value = 0 mask = ops.repeat( ops.cast( ops.any( ops.not_equal(y_true, mask_value), axis=-1, keepdims=True, ), "float32" ), repeats=y_true.shape[-1], axis=-1 ) masked_squared_error = ops.square(mask * (y_pred - y_true)) masked_mse = ops.sum(masked_squared_error, axis=-1) / ops.sum(mask, axis=-1) # results in lots of NaNs # masked_mse = ops.sum(masked_squared_error, axis=-1) / ops.maximum(ops.sum(mask, axis=-1), 1) # results in lots of zeros return masked_mse < /code> Но я не понимаю, как эта функция потерь применяется во время обучения. Если вы заметили, я включил два варианта о том, как вычислять masked_mse < /code>. Первый из них результатов в NANS, где не представлены измерения. Выход на x-y-координату. во время тренировок, однако, tensorflow регистрирует потерю как одно значение, которое всегда будет NAN. Я не понимаю, как рассчитывается эта агрегация. Потери и модель обучения для прогнозирования в основном нулей. С сокращением = нет [/code] Это рассчитывает координат MSE. С REDUT = "SUM_OVER_BATCH_SIZE" (по умолчанию) Это рассчитывает одно значение. Это как я должен определить свою функцию потери в маске?
Я пытаюсь создать модель ML в Tensorflow, которая принимает тензор с формой (128,128,12) и выводит тензор с формой (128,128,3), где средние измерения выходных данных означают (x, y, sensor_values). X-Y-координаты. Но если я возьму измерение, у меня...
Я пытаюсь создать модель ML в Tensorflow, которая принимает тензор с формой (128,128,12) и выводит тензор с формой (128,128,3), где выходные измерения означают (x, y, sensor_numb X-Y-координаты. Но если я возьму измерение, у меня всегда будет все 3...
Я работал над обучением своей модели VAE, используя два входных изображения: изображение диэлектрической проницаемости внутренней среды и изображение местоположения точки доступа в помещении. Я успешно сформулировал измерения кодера, декодера и...
Я обучаю DeeplabV3+ семантической сегментации изображений дистанционного зондирования. Я создаю модель после урока по keras ( ), и она отлично работает, когда я использую для обучения фокусную потерю (предустановленную в Keras/tf). Маски имеют...
Я пытаюсь определить, является ли данный файл разреженным. Я знаю, что есть способ проверить, используя собственный API Windows, и что в системах на базе Unix есть команда stat для получения чисел для логического размера и фактических выделенных...