Пользовательская функция потерь: логиты и цели должны иметь одинаковую форму ((?, 1) против (45000,))

Моя модель предсказывает все как 0 в двоичном классификаторе. Всего у нас 4000 истинных и 41000 ложных. Поэтому мы пытаемся создать пользовательскую функцию потерь.

Ошибка, которую я получаю:

(logits.get_shape(), target.get_shape())))

ValueError: логиты и цели должны иметь одинаковую форму ((?, 1) против (45000,))

Код выглядит следующим образом:

combined = tf.keras.layers.concatenate([modelRNN.output, modelCNN.output])

final_dense = tf.keras.layers.Dense(10, activation='relu')(combined) #ff kijken of dit slim is
final_dense = tf.keras.layers.Dense(1, activation='sigmoid')(final_dense)

final_model = tf.keras.Model(inputs=[modelCNN.input, modelRNN.input], outputs=final_dense)

targets = match_train
logits = final_dense
pos_weight = (45000 - 4539) / 4539


custom_loss = tf.nn.weighted_cross_entropy_with_logits(
    targets,
    logits,
    pos_weight,
    )


final_model.compile(optimizer='adam',
                    loss=custom_loss,
                    metrics=['accuracy'])

форма исходных массивов:

modelCNN = (45000, 28, 28, 1) float64
modelRNN = (45000, 93, 13) float64
labels = (45000,1) boolean

Проблема была частично решена с помощью кода в комментариях. Теперь я получаю сообщение об ошибке, которого раньше не было. В нем говорится:

TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

  File "<ipython-input-6-42327e5a4b50>", line 3, in <module>
    metrics=['accuracy'])

  File "C:\Users\Tijev\Anaconda3\envs\tfp3.6\lib\site-packages\tensorflow\python\training\checkpointable\base.py", line 442, in _method_wrapper
    method(self, *args, **kwargs)

  File "C:\Users\Tijev\Anaconda3\envs\tfp3.6\lib\site-packages\tensorflow\python\keras\engine\training.py", line 215, in compile
    loss = loss or {}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
416
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Преобразуйте свои метки в виде двумерного тензора.

targets = np.asarray(match_train).astype('float32').reshape((-1,1))

Источник: Оценка Tensorflow ValueError: логиты и метки должны иметь одинаковую форму ((?, 1) против (?,))

Кажется, это работает частично. Теперь я получаю другую ошибку. Я отредактировал свой пост. Не могли бы вы взглянуть на это? Это ошибка, которой у меня не было до того, как я создал пользовательскую функцию потерь.

TvCasteren 29.05.2019 21:44

Вы должны открыть для этого отдельный вопрос вместо того, чтобы изменять вопрос, который вы задали, поскольку сейчас вы спрашиваете о другой ошибке. Как правило, проблема заключается в смешивании Numpy/Python с Tensorflow. stackoverflow.com/questions/49177169/… Это может помочь вам разобраться в проблеме, но в остальном я настоятельно рекомендую погуглить ошибку и посмотреть, что получится. Stackoverflow поощряет поиск материалов, прежде чем задавать вопросы, чтобы уменьшить избыточность. Удачи!

Dave Liu 29.05.2019 21:48

Другие вопросы по теме