Правильный способ использования tf.gather_nd для перестановок в весовой матрице - PullRequest
0 голосов
/ 14 марта 2020

У меня есть весовая матрица размерности (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 с моими тренировочными данными в одну фазу (поскольку это медленный процесс), а затем обучить сеть.

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

...