Вызов model.fit для целевого массива столбцов и массива строкPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Вызов model.fit для целевого массива столбцов и массива строк

Сообщение Гость »


Они должны быть эквивалентными с точки зрения того, как они вводятся в модель, иначе один должен быть принят, а другой несовместим. Список столбцов против списка строк. Моя модельная архитектура принимает 5 входов и выдает 3 выхода. Я заметил, что во время обучения - когда моими целевыми данными был массив 3 x 1000, у меня были потери в районе 0,3 (что необычно много, учитывая, что когда я прогнозирую на тестовом наборе, мои потери составляют 0,01). Часто потери на каждом выходном узле одинаковы при использовании стандартных столбцов, а затем сильно различаются при использовании строк.

Тогда транспонирование y.T не работает — только при преобразовании в список list(y.T) модель принимает его как целевой. Тогда потери гораздо более сопоставимы с ожидаемыми. Я знаю, что это не должно работать, и лучше всего передать столбцы, но почему мои потери намного ниже.

Я знаю, это звучит бессмысленно, но вот MRE, чтобы проверить, что происходит:

inputs = tf.keras.layers.Input(shape=(5,)) x = tf.keras.layers.Dense(units=16, active="relu")(входные данные) x = tf.keras.layers.Dense(units=16, active="relu")(x) out1 = tf.keras.layers.Dense(1)(x) out2 = tf.keras.layers.Dense(1)(x) out3 = tf.keras.layers.Dense(1)(x) выходы = [выход1, выход2, выход3] модель = tf.keras.models.Model(входы=входы, выходы=выходы) # Создание данных данные = np.random.random(size=(300,8)) df = pd.DataFrame(данные) df.columns = ["A", "B", "C", "D", "E", "F", "G", "H"] df["F"] = df["F"] * 2 # Возмущающее df["G"] = df["G"] * 3 df["H"] = df["H"] * 4 model.compile(loss="mae") X = df[["A", "B", "C", "D", "E"]] y = df[["F", "G", "H"]] ny = y.to_numpy() # история = model.fit(X, list(ny.T), epochs=200) # Альтернатива — раскомментируйте, если хотите использовать история = model.fit(X, ny, epochs=200) # стандарт пред = модель.predict(X) pred = np.concatenate(pred, ось=1) остаток = np.mean(np.abs(ny - pred), ось=0) print(resid) # Потери при обучении ниже для строк... Любая помощь приветствуется. Может быть, определение модели с отдельными выходными ветвями, а не с одной Dense(3), что-то меняет?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»