Я могу создать модель, используя предварительно построенные высокоуровневые функции, такие как FullyConnected. Например:
X = mx.sym.Variable('data')
P = mx.sym.FullyConnected(data = X, name = 'fc1', num_hidden = 2)
Таким образом, я получаю символическую переменную P, которая зависит от символической переменной X. Другими словами, у меня есть вычислительный граф, который можно использовать для определения модели и выполнения таких операций, как fit и predict.
Теперь я хотел бы выразить P через X по-другому. Более подробно, вместо использования высокоуровневой функциональности (например, FullyConnected), я хотел бы явно указать отношения между P и X ", используя низкоуровневые тензорные операции (например, матричное умножение) и символические переменные, представляющие параметры модели (матрица веса озера).
Например, чтобы достичь того же, что и выше, я попробовал followig:
W = mx.sym.Variable('W')
B = mx.sym.Variable('B')
P = mx.sym.broadcast_plus(mx.sym.dot(X, W), B)
Однако полученный таким образом P не эквивалентен ранее полученному P. Я не могу использовать его таким же образом. В частности, насколько я понимаю, MXNet жалуется, что W и B не имеют значений (что имеет смысл).
Я также попытался объявить W и B другим способом (чтобы они имели значения):
w = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
b = np.array([7.0, 8.0])
W = mx.nd.array(w)
B = mx.nd.array(b)
Это не работает. Я предполагаю, что MXNet жалуется, потому что он ожидает символическую переменную, но вместо этого получает nd-массивы.
Итак, мой вопрос заключается в том, как построить модель с использованием низкоуровневых тензорных операций (например, матричное умножение) и явных объектов, представляющих параметры модели (например, матричные весы).