Чтобы расширить ответы, уже даваемые о том, почему для этого нет переносимого способа, вся концепция фактического стека не является частью стандарта. Вы могли бы написать среду выполнения C или C ++, которая не использует стек вообще, кроме записей вызовов функций (которые могут быть внутренне связанными или что-то еще).
Стек представляет собой деталь реализации конкретный компьютер / ОС / компилятор. Следовательно, любой метод доступа к меткам стека будет специфичен для машинного / OS / компилятора.
Пока вы не являетесь фактическим ответом на ваш конкретный вопрос (Niels достаточно хорошо это рассмотрели), но как совет для вашей проблемной области: просто выделите большой кусок памяти в куче. Нет никакой причины в стороне от удобства, что «реальный» стек любой другой. Очень рекурсивные (не хвостовые рекурсивные) алгоритмы часто требуют этого, чтобы гарантировать, что у них есть фактически неограниченный «стек». Языки скриптов, которые хотят, чтобы они отображали ошибку / исключение во время выполнения, а не сбой приложения-хоста, также часто делают это. Чтобы быть эффективными в отношении вещей, вы можете либо реализовать «разбитый стек» (например, std::deque
даст вам), либо вы можете просто предусмотреть выделение стека, достаточно большого для ваших нужд.
Я предполагаю, что вы пытаетесь использовать TF> = 1.6, потому что ваш процессор довольно старый и не поддерживает инструкции AVX. В самом деле, начиная с версии 1.6, , предварительно созданные двоичные файлы с тензорным потоком используют команды AVX .
В настоящее время ваши варианты: или
conda install
в Windows, похоже, не были созданы с поддержкой AVX, хотя я не мог найти эту информацию нигде и, следовательно, не могу сказать, является ли это преднамеренным, и как долго это будет случай. Остерегайтесь того, что двоичные файлы из conda-forge
(которые раньше были основным поставщиком кондоминиума conda, прежде чем он был доступен на основном канале), с другой стороны, построены с поддержкой AVX. Имейте в виду, что приведенные выше ответы верны для многих случаев. Однако понижение до tensorflow 1.5 может быть не лучшим решением, потому что, к примеру, у вас не будет доступа к некоторым новым функциям тензорного потока, например, к функции «нетерпеливого исполнения».
Что я сделал в моем случае было установить tensorflow 1.8 с conda вместо pip. Из моего небольшого опыта работы с conda и pip, conda, кажется, работает лучше, когда дело доходит до размещения необходимых файлов в их правильном месте.
В заключение. Вместо pip3 install --upgrade tensorflow
я использовал conda install tensorflow
, который установит последней версии.
Если у вас нет Anaconda, установленного для команд conda
. Загрузить с здесь
@ user1735003 понял это. Я не определил последнюю версию tensorflow
pip uninstall tensorflow
, а затем установил shadoworflow 1.5
pip install tensorflow==1.5
, после чего я проверил установку, выполненную со скриптом
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
Я получил правильный результат
Hello, TensorFlow!