Как найти неиспользованные атрибуты/методы в Visual C++ 2008

1) Использование tf.scan

Реализация RNN на низком уровне может быть достигнута с помощью функции tf.scan . Например, для SimpleRNN реализация будет похожа на:

# our RNN variables
Wx = tf.get_variable(name='Wx', shape=[embedding_size, rnn_size])
Wh = tf.get_variable(name='Wh', shape=[rnn_size, rnn_size])
bias_rnn = tf.get_variable(name='brnn', initializer=tf.zeros([rnn_size]))


# single step in RNN
# simpleRNN formula is `tanh(WX+WH)`
def rnn_step(prev_hidden_state, x):
    return tf.tanh(tf.matmul(x, Wx) + tf.matmul(prev_hidden_state, Wh) + bias_rnn)

# our unroll function
# notice that our inputs should be transpose
hidden_states = tf.scan(fn=rnn_step,
                        elems=tf.transpose(embed, perm=[1, 0, 2]),
                        initializer=tf.zeros([batch_size, rnn_size]))

# covert to previous shape
outputs = tf.transpose(hidden_states, perm=[1, 0, 2])

# extract last hidden
last_rnn_output = outputs[:, -1, :]

См. Полный пример здесь .

2) Использование AutoGraph

tf.scan - это цикл for, в котором вы можете реализовать его Auto-graph API:

from tensorflow.python import autograph as ag

@ag.convert()
def f(x):
# ...
for ch in chars:
      cell_output, (state, output) = cell.call(ch, (state, output))
      hidden_outputs.append(cell_output)
hidden_outputs = autograph.stack(hidden_outputs)
# ...

См. Полный текст пример с автографом API здесь .

3) Реализация в Numpy

Если вам все еще нужно углубиться внутрь, чтобы реализовать RNN, см. это руководство , в котором RNN реализуется с numpy.

4) Пользовательская RNN-ячейка в Керасе

См. здесь .

9
задан fhe 2 November 2008 в 01:28
поделиться

6 ответов

Попробуйте Линт ПК. Это довольно хорошо в нахождении избыточного кода. Я еще не попробовал версию 9. Версия 8 действительно занимает время для конфигурирования. Попробуйте интерактивную демонстрацию онлайн.

6
ответ дан 5 December 2019 в 01:20
поделиться

Я лично не использовал их инструменты для повышения производительности (я использую их костюм для управления окнами), но похоже, что DevExpress имеет C++ refactor'er названный, Осуществляют рефакторинг! для C++. Я сразу не определил функции, которые Вы ищете, но возможно у них есть он?

0
ответ дан 5 December 2019 в 01:20
поделиться

Хитрый бит - то, что много функций в C++ должны существовать, даже если их не называют. Повышение особенно вызовет это, но даже обычный код STL может сделать это. И Ваш код должен манипулировать. Вы могли бы определить копию ctor потому что станд.:: вектор официально требует его. Но если Вы не инстанцируете никакого станд.:: векторный участник, который на самом деле копирует T, Ваша копия ctor, останется неиспользованным.

Даже если они не имеют к, они часто существуют для безопасности. Например, объявление частного конструктора копии может предотвратить объект от непреднамеренного копирования. Без частного объявления компилятор определил бы общественность, memberwise копируют ctor для Вас. Теперь, действительно ли это "не использовано", и Вы хотите быть предупрежденными о них?

0
ответ дан 5 December 2019 в 01:20
поделиться

Блок проверки допустимости покрытия может показать неиспользованный код C++ (но не атрибуты). Это делает это динамично, таким образом, у Вас есть к 'exersize' приложение для получения результатов: http://successfulsoftware.net/2008/03/10/coverage-validator/

0
ответ дан 5 December 2019 в 01:20
поделиться

nDepend сделает это, наряду с наведением порядка в Вашем доме и взятием собаки на прогулке. Существует nagware версия, доступная бесплатно.

Следующий оператор языка запросов кода получит Вас список неиспользованных методов

 WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE MethodCa == 0 AND 
   !IsPublic AND !IsEntryPoint AND !IsExplicitInterfaceImpl AND 
   !IsClassConstructor AND !IsFinalizer
-2
ответ дан 5 December 2019 в 01:20
поделиться

PC-Lint is very powerful, but hard to lean. Of course that pretty well describes C and C++ doesn't it?

Another tool I think is excellent is Whole Tomato's Visual Assist X which integrates right into the IDE.

There are some big gotchas in C++ when searching for unreferenced code: templates, callbacks, and message handlers may be critical to your project but are never directly called. For example the handler for a thread is not called directly, but is a parameter when you create a new thread. The "On_buttonpress" type messages in MFC or WTL projects will also show up as un-called methods.

Once you find them you can configure PC-Lint to ignore these, but the first time through its a lot of work.

0
ответ дан 5 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: