У меня есть весовая матрица размерности (50,100)
, которая будет умножена на входной вектор (1,50)
, чтобы дать выход (1,100)
. Дело в том, что я хотел бы сделать форму весовой матрицы isomorphi c для каждого входа. под этим я подразумеваю, что в зависимости от значений, найденных в димесионах входного вектора, мы соответствующим образом перестановим весовую матрицу.
, если мы будем думать об этом просто как о нейронах. Если рассматривается нейрон i и его вход составляет 0,92734, то, учитывая, что в следующем слое будет ровно 10 нейронов, мы подключим первое соединение i к 0-му нейрону. Второе подключение к нейрону 9, третье подключение к нейрону 2, четвертое к 7, пятая к 3 и т. Д.
Это будет происходить на каждом входном нейроне.
я обнаружил, что .eval()
не является дифференцируемой операцией, поэтому я подумал об использовании tf.gather_nd
для достижения того же.
вот моя попытка сделать это:
def new_WeightMatrix(input_vector)
li=[]
li2=[]
count_t=0
for a in input_vector:
l=[int(i) for i in str(a) if i.isdigit()]
count_t=0
for c in l:
li.append(c)
li=np.asarray(li)
li=np.pad((0:20-count_t))
li2.append(li)
li=[]
count_t+=1
li2=np.asarray(li2)
s=tf.gather_nd(self.kernel,li2)
return s
но я Я не уверен, что он делает именно то, что хотел бы. Если бы кто-то мог мне помочь, это было бы признательно.
Еще одно соображение, в зависимости от ответа, я решил выбрать один пример тренировки за раз, чтобы я мог каждый раз менять матрицу веса. Я хотел бы передать весовую матрицу классу во время работы, чтобы он мог его использовать. Таким образом, я могу сначала сгенерировать все весовые матрицы, которые go с моими тренировочными данными в одну фазу (поскольку это медленный процесс), а затем обучить сеть.
Если бы я решил сделать это, как бы я сохраняю тензоры, чтобы потом их можно было подать в сеть. Должен ли я иметь полностью сделанную модель, а затем сохранять модель после создания каждого тензора?