Невозможно определить первый уровень DNN в keras - PullRequest
0 голосов
/ 30 мая 2020

Я пытался разработать NN классификации с несколькими классами.

Мой набор данных train_x содержит 23 примера, каждый из которых содержит 37 функций (размер: 23 * 37)
train_y содержит выходные данные для каждого примера (измерение: 23 * 7) [7 ярлыков / классов]. Я использовал одноразовое кодирование для каждого вывода примера.
len (слова) - это количество функций Это мой дизайн модели:

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(units=len(words), input_shape=[len(words)]),
    tf.keras.layers.Dense(8, activation="relu"),
    tf.keras.layers.Dense(8, activation="relu"),
    tf.keras.layers.Dense(len(labels), activation="softmax")
])

Для оптимизатора я использовал Adam Optimizer, а для функции потерь - Разреженная категориальная энтропия.

model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=['accuracy'])
model.fit(train_x, train_y, epochs=100)

Я получаю следующий обратный вызов:

Epoch 1/100
Traceback (most recent call last):
  File "main.py", line 83, in <module>
    model.fit(train_x, train_y, epochs=100, callbacks=[callbacks])
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\keras\engine\training.py", line 848, in fit
    tmp_logs = train_function(iterator)
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\def_function.py", line 644, in _call
    return self._stateless_fn(*args, **kwds)
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 2420, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 1661, in _filtered_call
    return self._call_flat(
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 1745, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\function.py", line 593, in call
    outputs = execute.execute(
  File "C:\Users\aaman\AppData\Local\Programs\Python\Python38\lib\site-packages\tensorflow\python\eager\execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError:  logits and labels must have the same first dimension, got logits shape [23,7] and labels shape [161]
         [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at main.py:83) ]] [Op:__inference_train_function_709]

Function call stack:
train_function

Я два дня искал на разных сайтах. Но все они сглаживают входные данные для первого слоя. Все они используют в качестве входных данных либо изображения в оттенках серого, либо изображения RGB. Все они требуют выравнивания первого слоя. Но мои входные данные уже сглажены.

Насколько я понимаю это, я получаю обратный вызов для первого слоя. Возможно, я неправильно понял концепцию единиц и input_shape, поэтому определил их неправильно.

1 Ответ

1 голос
/ 30 мая 2020

Измените sparse_categorical_crossentropy на categorical_crossentropy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...