¿Debo ir por TensorFlow o PyTorch?

Si un amigo me preguntara esto, probablemente sugeriría que fuera a buscar TensorFlow.

Estoy muy emocionado con PyTorch, ¡es un super proyecto, muy prometedor! Definitivamente lo intentaré y lo seguiré con atención.

Por otro lado, TensorFlow es mucho más maduro, está documentado y ya hay toneladas de tutoriales y artículos al respecto. Esto, para mí, es más importante para alguien que hace esa pregunta.

Pregúnteme en un año y compararía actuaciones, características, etc. Pero por ahora, recomendaría TensorFlow.

A2A, espero que ayude


EDITAR: Actualización 2018

Como la gente me pidió que actualizara, 1 año después de la publicación inicial, aquí está. Hablaré sobre las diferencias que considero más importantes, luego daré mi conclusión personal.

La primera diferencia ha sido, la filosofía de ejecución. En TensorFlow, primero se debe diseñar el modelo ejecutando algún tipo de código declarativo y luego ejecutarlo utilizando los llamados [math] tf.Sessions [/ math]. En la práctica, hace que sea más difícil depurar y realmente experimentar con él. Por otro lado, pytorch es dinámico, se ejecuta de una manera más procesal, lo que permite mirar dentro de la caja y ver qué sucede en el paso intermedio. Este ha sido un argumento importante en ese momento, pero ahora es menos cierto ahora que la ejecución dinámica se puede usar en TensorFlow (que se llama Ejecución ansiosa).

Además, descubrí que TensorFlow está “ocultando” muchos detalles. Esto no es bueno ni malo. Se trata de si te gusta o no. Es bueno que uno pueda entender fácilmente lo que está sucediendo. Hay nombres de objetos y funciones que tienen sentido, lo mismo para el parámetro, un modelo complejo podría ser entendido por cualquiera. Por otro lado, entrar en detalles puede ser una pesadilla porque el código que realmente se ejecuta se divide en docenas de archivos, funciones, etc. Por lo tanto, es más claro en la superficie, pero es más difícil entrar en detalles. Me gusta decir que Pytorch tiene bloques de construcción más pequeños. Escribir su propia capa será increíblemente simple mientras solo usa estructuras realmente simples como proyecciones lineales, algunas funciones de activación. Puede que tenga que escribir un poco más, pero crea un código increíblemente claro, más cercano a la realidad de lo que se ha publicado.

Ambas son herramientas muy útiles, pero no todos necesitamos las mismas herramientas, supongo. Como estoy orientando la investigación, mi necesidad diaria es poder comprender cómo funcionan las cosas, experimentar e implementar documentos. Para esto, Pytorch es realmente muy útil y agradable. Encontré que TensorFlow parece mágico y frustrante para esto.

TensorFlow puede ser más útil para un entorno de producción si no desea meterse con lo que considera detalles inútiles.

Conclusión : si un amigo me preguntara esto, primero trataría de entender sus necesidades (¿qué quieres hacer? ¿Aprender?), Luego presentar las diferencias y dar mi consejo final.

Traté de dar un punto de vista objetivo, pero ciertamente fue sesgado por mi propia experiencia, después de eso es exactamente sobre lo que estoy escribiendo.

Creo que PyTorch es una herramienta mejor tanto a corto como a largo plazo.

Este es el por qué:

Término corto:

El tiempo de iteración es más rápido en PyTorch. Debido al modelo de ejecución diferida, todo lleva más tiempo en TF, principalmente depuración, menos integrado con numpy. Como investigador, te importa mucho el tiempo de respuesta y el tiempo de depuración de tus modelos. También es mucho más fácil construir gráficos dinámicos en PyTorch en este momento, lo que permite que una determinada clase de modelos se implemente mucho más rápido y más simple, mientras que TF está orientado hacia gráficos estáticos con construcciones dinámicas bastante torpes y difíciles de usar y depurar (tf.while_loop etc) Además, desde una perspectiva de desarrollador de nivel inferior, el desarrollo de operaciones personalizadas es mucho más simple / rápido en PyTorch. Las operaciones personalizadas de Tensorflow requieren mucho más código repetitivo y la fuente es mucho más difícil de navegar. La documentación para la API interna / C ++ no es tan buena como la de Python, lo que hace que la construcción de operaciones personalizadas en TF sea muy costosa. Si bien Tensorflow es una pieza sólida de ingeniería, su falta general de búsqueda de la simplicidad / la maquinilla de afeitar de Ockham en su diseño es evidente en todo el marco y su uso.

A largo plazo:

Google está agregando una ejecución entusiasta + diferenciación de cinta a TF, sin embargo, no está claro qué tan bien se combinará con su API actual que está menos integrada con numpy y generalmente está diseñada en torno al modelo diferido. En términos de negocios, Google quiere vender Cloud + TPU e inferencia en Android. Por lo tanto, no están muy incentivados para hacer que TF funcione bien en HW de productos básicos para inferencia o capacitación. Parece que Google está intentando competir con NVIDIA en HW. Esto parece mostrar un rendimiento inferior en cosas como incluso las convoluciones NCHW no son del todo compatibles y tienen tanto activaciones como pesos transpuestos en el camino dentro y fuera de cada convolución NHWC, agregando una sobrecarga sustancial, especialmente para lotes pequeños.

Probablemente habrá paridad en las características / conveniencia eventualmente, pero a corto plazo (~ 1 año) habrá una caída en la productividad del desarrollo del modelo con TF (en comparación con PyTorch).

No me queda claro cuál es la estrategia a largo plazo de Facebook, pero están construyendo un marco sólido que es realmente fácil de usar. Pytorch está diseñado para interoperar con Caffe2 donde Caffe2 apunta a una implementación / inferencia multiplataforma eficiente basada en C ++. Tenga en cuenta que Facebook es intrínsecamente agnóstico para tratar de vender cualquier cosa en los servicios de Android / nube para que no tengan una agenda y, por lo tanto, se los incentive a crear el marco más abierto sin una agenda posterior (presionando Android / Cloud). CUDA es actualmente el ecosistema sw más productivo para un desarrollo de aprendizaje profundo más personalizado de nivel inferior y NVIDIA parece estar muy por delante de todos los demás en el ecosistema HW +. También en la apuesta a largo plazo parece que Google está apostando por TF + TPU como una alternativa a CUDA, pero en mi opinión, aunque creo que la API de TF es de nivel bastante bajo (lo suficiente como para poder construir muchas operaciones personalizadas fuera de las operaciones tf.xx), todavía es un nivel demasiado alto para competir realmente con CUDA ya que puedes hacer muchas más operaciones personalizadas / interesantes en CUDA.

Todas estas deficiencias se pueden observar con relativa dificultad para lograr que TF funcione tanto con entrenamiento distribuido como con inferencia de alto rendimiento.

En base a esta estructura de incentivos en este momento, diría que en este momento parece que la mejor apuesta a corto y largo plazo es rodar con el combo FB + NV para la productividad y la inversión a largo plazo en el conjunto de habilidades.

También encontré este enlace útil para perspectivas adicionales:

¿Por qué los investigadores de IA y aprendizaje automático están comenzando a adoptar PyTorch?

Honestamente, la mayoría de los expertos que conozco adoran Pytorch y detestan a TensorFlow. Karpathy y Justin de Stanford, por ejemplo. Puedes ver los pensamientos de Karpthy y le pregunté personalmente a Justin y la respuesta fue clara: ¡PITORCHO! TF tiene muchas relaciones públicas, pero su API y modelo gráfico son horribles y desperdiciarán mucho tiempo de investigación.

El tipo de personas que “aman” a TF son personas que no son verdaderas expertas en ML, por ejemplo, ese tipo indio en YouTube. La única razón es la RP de TF.

No puedo enfatizar esto lo suficiente:

A menos que realmente deba tener una aplicación de Android o entrenar su modelo con muchas máquinas, le recomiendo que se mantenga alejado de TF y haga todo con Pytorch.

¡Personalmente, podría haber hecho cosas en Pytorch después de 2 días de aprender ese marco que no podría haber hecho después de más de un mes con TF! Y de nuevo, todavía tengo que encontrarme con alguien a quien considero un experto que realmente prefiere TF sobre Pytorch (!!).

De todos modos, quiero desearles a todos buena suerte con sus aventuras de ML 🙂

Probablemente PyTorch si planeas hacer cosas locas.

TF + Keras es ideal para cosas simples. Incluso cosas realmente complicadas y extrañas.

PyTorch es mejor para la estructura dinámica.

Puede ser que la estructura dinámica llegue a dominar el paradigma en algún momento. Parece en lo menos improbable que se descarte. Yo iría con PyTorch por esa razón.

Para ser justos, la única razón para usar TF en lugar de PyTorch es si se ve obligado a hacerlo (la empresa en la que trabaja usa Tensorflow). Soy una de esas personas que se ve obligada a usar Tensorflow en el trabajo, y hago todos los proyectos paralelos en PyTorch. PyTorch es mucho más limpio, es Pythonic, más fácil de escribir en OOP, mucho más fácil de depurar, e incluso creo que tiene una mejor documentación. Claro, TF tiene más cosas, pero quién en la Tierra necesita 7 funciones que hacen una convolución 2D. Además, he encontrado respuestas en foros de PyTorch más rápido que en Tensorflow stackoverflow.

Estoy muy feliz de ver que hay cada vez más documentos cuyo código se publica en PyTorch, y menos en Tensorflow. Es una forma mucho más rápida de rehacer los experimentos y comprender lo que está sucediendo en el código.

Descargo de responsabilidad: nunca he implementado un producto, ha estado escribiendo principalmente prototipos tanto para la academia como para la industria.

Mire los requisitos de su proyecto y luego hágalo en la biblioteca correspondiente.

Ser un experto en múltiples intercambios ayuda más que ser el maestro de uno.

Ni PyTorch ni TensorFlow son perfectos. Hay muchos casos de uso para ambas bibliotecas; donde te quemarán el cerebro. Lo digo porque he usado ambos y me he enfrentado a esas situaciones.

Aprenda ambas bibliotecas escribiendo pequeños proyectos. Incluso si está ocupado y no puede escribir proyectos; Cuando piense en una idea o su implementación, investigue cómo podría implementarla en ambas bibliotecas. Le dará una mejor idea de qué biblioteca usar para qué caso de uso.

No te vayas por la opinión popular de favorecer a uno sobre el otro. Tarde o temprano, duele más que hacer un autoexamen.

TensorFlow es una biblioteca de aprendizaje profundo muy potente y madura con fuertes capacidades de visualización y varias opciones para usar para el desarrollo de modelos de alto nivel. Tiene opciones de implementación listas para producción y soporte para plataformas móviles. TensorFlow es una buena opción si usted:

  • Desarrollar modelos para la producción.
  • Desarrollar modelos que deben implementarse en plataformas móviles.
  • Desea un buen apoyo de la comunidad y una documentación completa
  • Desea recursos de aprendizaje enriquecidos en varias formas (TensorFlow tiene un MOOC completo)
  • Quiere o necesita usar Tensorboard
  • Necesidad de usar entrenamiento modelo distribuido a gran escala

PyTorch sigue siendo un marco joven que está ganando impulso rápidamente. Puede que le quede bien si:

  • Investigue o su producción los requisitos no funcionales no son muy exigentes
  • Desea una mejor experiencia de desarrollo y depuración
  • Amo todas las cosas Pythonic

Si tiene el tiempo, el mejor consejo sería probar ambos y ver qué se adapta mejor a sus necesidades.

Salud,

Vimal

Src: PyTorch vs TensorFlow – descubriendo la diferencia – Towards Data Science

Primero algunos hechos:

Flujo tensorial

  • Creado y respaldado por Google.
  • Se está utilizando tanto en investigación como en producción.
  • Google ha lanzado soporte para soporte de flujo de tensor acelerado por hardware a través de TPU.
  • Se ejecuta tanto en CPU como en GPU.
  • Proporciona gráficos computacionales estáticos.
  • Keras es famoso API de alto nivel entre los demás.

PyTorch

  • Creado y respaldado por Facebook.
  • Se está utilizando solo en investigación. Para la producción, generalmente se usa Caffe2 (nuevamente respaldado por Facebook).
  • No hay soporte de hardware específico.
  • Se ejecuta tanto en CPU como en GPU.
  • Proporciona gráficos computacionales dinámicos, buenos para los modelos RNN o RNTN.
  • NN es la única API de alto nivel.

Eso es todo. En resumen, recomendaría recibir capacitación en ambos. Y basarse en su nivel de comodidad es el que más se ajusta.

Además de eso, hay otros motores DL emergentes de Microsoft, AWS e IBM. Echa un vistazo a esos también.

¿Crees que un marco será suficiente?

No será suficiente Además, no es como si te estuvieras casando con su responsable principal (¿o sí?), Elige ambos, agrega algo de Theano y lee algo sobre mxnet por si acaso. Tal vez sea suficiente por algún tiempo, pero luego alguien lanzará una mierda loca en Caffe y expandirás tus horizontes de todos modos.

Aprende ambos, leer algunos documentos para un fin de semana no es la parte difícil.

Todos los marcos de aprendizaje profundo son más o menos iguales en términos de cómo construir una red neuronal, variar los hiperparámetros, entrenar / probar, etc. Realmente no importa cuál aprenda. Si entiendes uno de los entiendes a todos con una variación muy pequeña.

Yo personalmente recomendaría tensorflow, porque es más fácil integrarse en un entorno de producción y mantener modelos cuando se utiliza la plataforma en la nube de Google.

Pero como dije, si solo te importa aprender, no importa.

Esta fue una pregunta difícil cuando comencé el año pasado. Pregunté y elegí con Tensorflow por la siguiente razón

a) Soporte informático distribuido. Los gráficos pueden abarcar varias computadoras.

b) Tensorflow tiene documentación relativamente buena

c) Soporte de una gran empresa como Google

d) Soporte para GPU

e) Ahora viene con XLA, que tiene mejoras de rendimiento.

f) Google junto con DeepMind tiene el mejor equipo de IA en mi opinión. Tanto según el conocimiento público utilizan Tensorflow.

Al trabajar con Tensorflow, una cosa son los nombres de los métodos, los paquetes no parecen estar bien pensados. Como programador me molestó, pero lo acepté y lo superé. También Keras se ejecuta en Tensorflow y Theano. Keras committer se ha unido a Google.

Observé la antorcha, no la pytorch, el nombre del método parece más limpio y más cercano a lo que algunos de los documentos te pedirán que hagas.

Al final del día, comprender los algoritmos es más importante que cualquiera de estos marcos.

Creo que ahorrará tiempo aumentando y leyendo inicialmente más de estos documentos que en cualquiera de estos marcos numéricos. Yo diría que elija un marco para comenzar, trabaje con él y luego, si lo desea, puede probar otros.

Además de esto, en una conferencia, Andrej Karpathy también mencionó que se mudó de Lua / Torch a Tensorflow en OpenAI, lo que parece ayudarme a apoyar mi decisión.

El campo está evolucionando muy rápidamente con la industria y la academia con toda su fuerza, veremos qué avanza y se queda.

Roman tiene razón, que eventualmente terminarás aprendiendo mucho más de lo que eliges, ya que verías el código de varios documentos sobre tensorflow, torch, Theano, MxNet.

Me encantaría escuchar su decisión a medida que avanza y lo que aprende.

Me gustan TensorFlow y Keras.

  • La mayoría de las veces queremos que nuestros marcos no se interpongan en nuestro flujo de pensamiento: Keras hace un buen trabajo.
  • OTOH, ocasionalmente necesitamos un marco poderoso que pueda manejar casos de esquina: TF lo maneja bastante bien.

Como otros señalan, TF tiene bastante buena capacidad de distribución e integración. Por ejemplo, estoy planeando TF en Raspberry Pi para la detección / localización de objetos; actualizaré esta respuesta después de que avance.

Si desea una interfaz de tipo numpy para crear y entrenar redes neuronales, entonces Pytorch seguro.

El concepto de gráfico estático en Tensorflow hace que sea más difícil de depurar y crear redes flexibles, mientras que Pytorch es fácil de depurar. También debe esperar la compilación de gráficos con Tensorflow. Los gráficos estáticos están destinados a hacerlo más rápido, pero en la práctica, Tensorflow y Pytorch tienen más o menos la misma velocidad.

Dado que su velocidad es la misma, no veo una razón por la que se lo dificulte lidiar con gráficos estáticos.

PyTorch, fácilmente, a menos que desee distribuir sus modelos en teléfonos. Pero Caffe2 debería soportar eso lo suficientemente pronto.

Editar: esto ya es compatible. http://pytorch.org/tutorials/adv… .

Vi a los miembros del laboratorio cambiar de Tensorflow a Pytorch, pero nunca vi a nadie cambiar de Pytorch a Tensorflow.