Как разработать нейронную сеть для прогнозирования углов суставов, формирования позиций и ориентации суставов - PullRequest
0 голосов
/ 01 ноября 2019

Я новичок в нейронной сети. У меня есть набор данных о 3D-положениях суставов (6400 * 23 * 3) и ориентациях в кватернионах (6400 * 23 * 4), и я хочу предсказать углы суставов для всех 22 суставов и 3 плоскостей движения (6400 * 22 * ​​3). Я попытался создать модель, однако она не будет работать, поскольку входные данные не соответствуют выходной форме, и я не могу понять, как ее изменить.

мой код

import scipy
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling2D, Dense, Flatten
from tensorflow.keras.utils import to_categorical
Jaload = scipy.io.loadmat('JointAnglesXsens11MovementsIforlængelse.mat') 
Orload = scipy.io.loadmat('OrientationXsens11MovementsIforlængelse.mat')
Or = np.array((Orload['OR'][:,:]), dtype='float')
Ja = np.array((Jaload['JA'][:,:]), dtype='float')
Jalabel = np.array(Ja)
a = 0.6108652382 
Jalabel[Jalabel<a] = 0
Jalabel[Jalabel>a] = 1
Ja3d = np.array(Jalabel.reshape(6814,22,3)) # der er 22 ledvinkler 
Or3d = np.array(Or.reshape(6814,23,4)) # der er 23 segmenter
X_train = np.array(Or3d)
Y_train = np.array(Ja3d)
model = Sequential([
  Dense(64, activation='relu', input_shape=(23,4)),
  Dense(64, activation='relu'),
  Dense(3, activation='softmax'),])
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam') # works 
model.fit(
  X_train,
  to_categorical(Y_train),
  epochs=3,)

Запуск model.fit возвращается с: ValueError: Целевой массив с формой (6814, 22, 3, 2) был передан для вывода формы (Нет, 3) при использовании в качестве убытка categorical_crossentropy. Эта потеря предполагает, что цели будут иметь ту же форму, что и выходные данные.

1 Ответ

0 голосов
/ 01 ноября 2019

Вот несколько советов, которые могут помочь вам продвинуться дальше:
(1) Возможно, вы захотите вставить слой «Flatten ()» непосредственно перед финальной плотностью. Это в основном сведет выходные данные предыдущих слоев в одно измерение.
(2) Возможно, вы захотите, чтобы конечный плотный слой имел 22 * ​​3 = 66 единиц, а не три. Каждая выходная единица будет представлять определенный угол соединения.
(3) Вы также можете свернуть Y_train (num_samples, 22 * ​​3), используя цифровую форму.
(4) Возможно, вы захотите сделатьВ последнем плотном слое вместо «softmax» активируется «линейная» активация - softmax заставит выходы суммировать до вероятности 1.
(5) Не преобразовывайте y_train в категориальный. Я полагаю, что он уже в правильном формате (после того, как вы измените его, чтобы он соответствовал пересмотренному выводу модели).
(6) Метрика, которую нужно использовать, вероятно, не "categoryor__crossentropy", а, возможно, "mse" (средняя квадратическая ошибка).

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

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