Я думаю, что мой код NumPy может быть оптимизирован, но я не знаю, так ли это, или с чего начать. Я использую петли и векторизацию - PullRequest
0 голосов
/ 02 марта 2020

У меня есть что-то похожее на следующий код, и я хотел бы знать, видите ли вы место для оптимизации:

    def __call__( self, t, x ):
        input_activities = x[ :self.input_size ]

        for j in range( self.output_size ):
            for i in range( self.input_size ):
                # did the input neuron j spike in this timestep?
                spiked = True if np.rint( input_activities[ i ] ) else False
                if spiked:
                    # update memristor resistance state
                    self.memristors[ j, i ].pulse( t, local_error[ j ] )

        # query each memristor for its resistance state
        extract_R = lambda x: x.get_state( t, value="conductance", scaled=True )
        extract_R_V = np.vectorize( extract_R )
        weights = extract_R_V( self.memristors )
        # calculate the output at this timestep
        return_value = np.dot( weights, input_activities )

        return return_value 

    def pulse( self, t, V=0.1 ):
        c = self.a + self.b * V
        self.r_curr = self.r_min + self.r_max * (((self.r_curr - self.r_min) / self.r_max)**(1 / c) + 1)**c

        return self.r_curr

Вызов .pulse обновляет переменную объекта мемристора self.r_curr, которая затем возвращается get_state() метод.

Я почти уверен, что этот код можно оптимизировать, но я бы не знал, каким будет лучший способ сделать это. Могу ли я вернуть обновленные значения из pulse() напрямую во временный массив NumPy в __call__?

Текущая производительность моего кода, оцененная в PyCharm, следующая: количество вызовов и время в мс график вызовов

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