Значение gcc-O2

Когда вы используете relu activation function внутри lstm cell, гарантируется, что все выходы из ячейки, а также состояние ячейки будут строго >= 0. Из-за этого ваши градиенты становятся чрезвычайно большими и взрываются. Например, запустите следующий фрагмент кода и обратите внимание, что выходные данные никогда не бывают < 0.

X = np.random.rand(4,3,2)
lstm_cell = tf.nn.rnn_cell.LSTMCell(5, activation=tf.nn.relu)
hidden_states, _ = tf.nn.dynamic_rnn(cell=lstm_cell, inputs=X, dtype=tf.float64)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(hidden_states))
11
задан tshepang 24 June 2014 в 11:09
поделиться

5 ответов

Уровень 2 оптимизации.

Из страницы справочника GCC:

- O1 Оптимизируют. Оптимизация компиляции занимает несколько больше времени и намного больше памяти для большой функции.

- O2 Оптимизируют еще больше. GCC выполняет почти всю поддерживаемую оптимизацию, которая не включает компромисс скорости пространства. Компилятор не выполняет развертывание цикла или встраивание функции при определении-O2. По сравнению с-O эта опция увеличивает и время компиляции и производительность сгенерированного кода.

- O3 Оптимизируют еще больше.-O3 включает всю оптимизацию, указанную-O2, и также включает - finline-функции, - funswitch-циклы,-fpredictive-commoning, - fgcse после того, как перезагрузки и - ftree-векторизуют опции.

- O0 Уменьшают время компиляции и заставляют отладку привести к ожидаемым результатам. Это - значение по умолчанию.

- OS Оптимизирует для размера. - OS включает всю-O2 оптимизацию, которая обычно не увеличивает размер кода. Это также выполняет дальнейшую оптимизацию, разработанную для сокращения размера кода.

35
ответ дан 3 December 2019 в 00:51
поделиться

Это - оптимизировать переключатель. См. gcc - справка.

3
ответ дан 3 December 2019 в 00:51
поделиться

Испытанная страница справочника?

- O2

Оптимизируйте еще больше. GCC выполняет почти всю поддерживаемую оптимизацию, которая не включает компромисс скорости пространства. Компилятор не выполняет развертывание цикла или встраивание функции при определении-O2. По сравнению с-O эта опция увеличивает и время компиляции и производительность сгенерированного кода.

В человеческих словах: это - самый высокий действительно безопасный способ оптимизации.-O3 делает перестройки, которые могут время от времени быть неприятными. Предмет как таковой довольно глубок.

2
ответ дан 3 December 2019 в 00:51
поделиться

Уровень 2 оптимизации, макс. 3. См.: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Отметьте, это в несколько лет назад -O3 мог вызвать некоторые незначительные сбои путем чрезмерной "оптимизации" кода. AFAIK, это больше не верно с современными версиями GCC. Но с инерцией, -O2 считается "макс. сейфом".

12
ответ дан 3 December 2019 в 00:51
поделиться

Компиляторы могут использовать различные методы оптимизации как развертывание цикла, конвейерная оптимизация ЦП, чтобы найти бесполезный код и избежать опасностей данных для ускорения кода. Например, цикл, который происходит установленная сумма времен, будет преобразован в непрерывный код без управления циклом наверху. Или если все повторения цикла независимы, некоторое распараллеливание кода возможно.

Установка уровня оптимизации к 2 говорит, сколько энергии компилятор должен потратить поиск той оптимизации. Возможные значения колеблются от 1 до 3

Можно узнать больше о том, что компилятор может сделать для оптимизации кода: http://en.wikipedia.org/wiki/Compiler_optimization

2
ответ дан 3 December 2019 в 00:51
поделиться