Как выполнить умножение матрицы на данные плотного слоя в нейронной сети на основе его меток - PullRequest
0 голосов
/ 07 октября 2019

Моя нейронная сеть имеет плотный слой с выходной формой (Нет, 256). Я хочу создать последовательный слой, который бы брал выходные данные и метки плотного слоя и умножал его на заданную ортогональную матрицу (16, 16) на основе этой метки. Есть 211 ярлыков / классов. За этим должны последовать оставшиеся слои CNN. Как мне это сделать? Очень ценю любую помощь.

Я думал о создании 211 плотных слоев каждый с весами, инициализированными к определенным значениям ортогональной матрицы. Эти слои можно сделать не обучаемыми, установив model.layers [n] .trainable = False. Но я не знаю, как их умножить на основе меток исходного плотного слоя.

Это реализованная архитектура нейронной сети.

model.add(Flatten())
model.add(Dense(256, activation = "relu"))
model.add(Dropout(0.5))
model.add(Dense(211, activation = "softmax"))
model.summary()

Ранее я извлек функции и метки после обучения, чтобы сохранить их в файле CSV.

extract = Model(model.input, [model.get_layer('dense_1').output, model.output])
features, labels = extract.predict(X_train)
labels = np.argmax(labels, axis=1)

np.savetxt("C:\\Users\\xxx.csv",features, delimiter=",")
print(labels)
np.savetxt("C:\\Users\\yyy.csv",labels, delimiter=",")

MyПроблема в том, как извлечь элементы (из плотного слоя) в самой нейронной сети и управлять ими (путем умножения матриц) на основе соответствующих меток классов.

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