Я пытался разработать 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, поэтому определил их неправильно.