¿Cuáles son las principales diferencias entre TensorFlow y SciKit Learn?

Derek Murray ya proporcionó una excelente respuesta. Como él dijo, TensorFlow es más de bajo nivel; Básicamente, los ladrillos de Lego que lo ayudan a implementar algoritmos de aprendizaje automático, mientras que scikit-learn le ofrece algoritmos estándar, por ejemplo, algoritmos de clasificación como SVM, bosques aleatorios, regresión logística y muchos, muchos más. TensorFlow realmente brilla si desea implementar algoritmos de aprendizaje profundo, ya que le permite aprovechar las GPU para una capacitación más eficiente.

Para darle una mejor idea, ajustemos un modelo de regresión softmax en el conjunto de datos de Iris a través de scikit-learn:

de sklearn.datasets import load_iris
de sklearn.linear_model import LogisticRegression
importar matplotlib.pyplot como plt

# Cargando datos
iris = load_iris ()
X = iris.data [:, [0, 3]] # longitud del sépalo y ancho del pétalo
y = iris.target

# estandarizar
X [:, 0] = (X [:, 0] – X [:, 0] .mean ()) / X [:, 0] .std ()
X [:, 1] = (X [:, 1] – X [:, 1] .mean ()) / X [:, 1] .std ()

lr = LogisticRegression (pena = ‘l2’,
dual = falso
tol = 0.000001,
C = 10.0,
fit_intercept = True,
intercept_scaling = 1,
class_weight = None,
random_state = 1,
solver = ‘newton-cg’,
max_iter = 100,
multi_class = ‘multinomial’,
detallado = 0,
warm_start = False,
n_jobs = 1)
lr.fit (X, y)
y_pred = lr.predict (X)
print (‘Últimas 3 etiquetas de clase:% s’% y_pred [-3:])

Además, tengo una pequeña función auxiliar para trazar la superficie de decisión 2D:

de mlxtend.evaluate import plot_decision_regions

plot_decision_regions (X, y, clf = lr)
plt.title (‘Regresión Softmax en scikit-learn’)
plt.show ()

Eso fue fácil, ¿verdad? :). Ahora, si queremos ajustar un modelo de regresión de Softmax a través de TensorFlow, sin embargo, primero tenemos que “construir” el algoritmo. Pero realmente suena más complicado de lo que realmente es.

TensorFlow viene con muchas funciones y utilidades de “conveniencia”, por ejemplo, si queremos utilizar un enfoque de optimización de descenso de gradiente, el núcleo o nuestra implementación podrían verse así:

# Construir el gráfico
g = tf.Graph ()
con g.as_default ():

si init_weights:
self._n_classes = np.max (y) + 1
self._n_features = X.shape [1]
tf_weights_, tf_biases_ = self._initialize_weights (
n_features = self._n_features,
n_classes = self._n_classes)
self.cost_ = []
más:
tf_weights_ = tf.Variable (self.weights_)
tf_biases_ = tf.Variable (self.biases_)

# Preparar los datos de entrenamiento
y_enc = self._one_hot (y, self._n_classes)
n_idx = list (rango (y.shape [0]))
tf_X = tf.convert_to_tensor (valor = X, dtype = self.dtype)
tf_y = tf.convert_to_tensor (valor = y_enc, dtype = self.dtype)
tf_idx = tf.placeholder (tf.int32,
forma = [int (y.shape [0] / n_batches)])
X_batch = tf.gather (params = tf_X, indices = tf_idx)
y_batch = tf.gather (params = tf_y, indices = tf_idx)

# Configure el gráfico para minimizar el costo de entropía cruzada
logits = tf.matmul (X_batch, tf_weights_) + tf_biases_
cross_entropy = tf.nn.softmax_cross_entropy_with_logits (logits,
y_batch)
costo = tf.reduce_mean (cross_entropy)
optimizador = tf.train.GradientDescentOptimizer (
learning_rate = self.eta)
train = optimizer.minimize (costo)

# Inicializando las variables
init = tf.initialize_all_variables ()

Y podemos ejecutar el entrenamiento de la siguiente manera:

# Lanzar el gráfico
con tf.Session (graph = g) como sess:
sess.run (init)
self.init_time_ = time ()
para época en rango (self.epochs):
si self.minibatches> 1:
n_idx = np.random.permutation (n_idx)
minis = np.array_split (n_idx, self.minibatches)
costos = []
para idx en minis:
_, c = sess.run ([tren, costo], feed_dict = {tf_idx: idx})
costos.append (c)

Para fines de demostración, he implementado la regresión de Softmax a través de TensorFlow en un estilo orientado a objetos que es algo similar a la implementación de scikit-learn. El ejemplo de código completo se puede encontrar aquí si está interesado: rasbt / mlxtend

de mlxtend.tf_classifier import TfSoftmaxRegression

lr = TfSoftmaxRegression (eta = 0.75,
épocas = 1000,
print_progress = True,
minibatches = 1,
random_seed = 1)

lr.fit (X, y)
Época: 1000/1000 | Costo 0.12

plt.plot (rango (len (lr.cost_)), lr.cost_)
plt.xlabel (‘iteraciones’)
plt.ylabel (‘Costo’)
plt.show ()

de mlxtend.evaluate import plot_decision_regions

plot_decision_regions (X, y, clf = lr)
plt.title (‘Regresión de Softmax vía Descenso de gradiente en TensorFlow’)
plt.show ()

Creo que la mayor ventaja de usar Tensorflow sobre Scikit Learn es la capacidad de hacer una diferenciación automática . Tensorflow funciona con una idea clara de que construyes un gráfico de cálculo para hacer cualquier cálculo y siempre terminas trabajando en ese gráfico. Los nodos en el gráfico son las diferentes operaciones y los bordes son los tensores. Esta estructura de visualización de un problema permite que Tensorflow nos proporcione una diferenciación automática para realizar fácilmente la propagación hacia atrás. Tensorflow proporciona otras operaciones de bajo nivel. Así, literalmente, puede construir cualquier modelo de aprendizaje automático. Tensorflow también nos permite usar GPU muy fácilmente para un entrenamiento rápido.

Scikit Learn es una API de más alto nivel que le brinda formas fáciles de construir modelos estándar de aprendizaje automático. Además, no puede construir ningún modelo que le guste, ya que scikit learn no nos proporciona tal kit de herramientas de diferenciación automática. Scikit learn es más útil si necesita codificar rápidamente y entrenar algunos clasificadores estándar como Regresión logística, SVM, etc.

TensorFlow es una biblioteca de bajo nivel que le permite construir modelos de aprendizaje automático (y otros cálculos) utilizando un conjunto de operadores simples, como “agregar”, “matmul”, “concat”, etc. scikit-learn es un nivel superior biblioteca que incluye implementaciones de varios algoritmos de aprendizaje automático, para que pueda definir un objeto modelo en una sola línea o algunas líneas de código, luego usarlo para ajustar un conjunto de puntos o predecir un valor.

De hecho, es posible construir scikit-learn sobre TensorFlow, como muestra la biblioteca Scikit Flow recientemente lanzada: https://github.com/google/skflow .

Tratando de complementar las respuestas anteriores, Tensorflow tiene (al menos por ahora) un enfoque de nivel más bajo. Pero estas complejidades pueden ocultarse de alguna manera, por ejemplo, a través de skflow, y reutilizando modelos Caffe a través del traductor de modelos Caffe.

También es probable que en el futuro aparezcan nuevas extensiones de niveles más altos para Tensorflow, que aborden las tareas rápidas de creación de prototipos y exploración de datos. De hecho, es más fácil escribir tales bibliotecas que agregar extensiones de bajo nivel.

También he visto un soporte no tan completo para modelos más simples, parece más orientado al menos a redes de múltiples capas. También parece extraño no tener un soporte directo y sencillo para tareas simples como trazados de datos simples, leer CSV, guardar archivos de imagen, etc.

TensorFlow es una biblioteca para cálculos de datos de matriz y cálculos que se pueden usar para conducir redes neuronales y aprendizaje profundo. Proporciona programación de bajo nivel para trabajar con las matemáticas, así como métodos para definir capas de redes neuronales. TensorFlow no proporciona otro método de aprendizaje automático, como árbol de decisión, regresión logística, k-means o pca.

Scikit-learn es una biblioteca para minería de datos y aprendizaje automático. Proporciona métodos de aprendizaje automático, que incluyen diversos aprendizajes supervisados ​​y no supervisados. Al contrario que TensorFlow, no tiene un marco de aprendizaje profundo.

More Interesting

¿Las redes de cápsulas reemplazarán a las redes neuronales?

En optimización, ¿cuáles son algunos ejemplos geniales de reformulación?

¿Cuál es la diferencia entre la retropropagación y la retropropagación a través del tiempo?

¿El aprendizaje automático es algo que no llegará demasiado lejos si no tiene la formación académica adecuada? Dado que hay tanto en Internet, ¿se puede entender?

¿Por qué las GAN han tenido menos éxito con el texto que con las imágenes y el habla?

¿Necesita saber la teoría de la medida para hacer investigación de aprendizaje automático?

¿Dónde están los temas interesantes que se cruzan con la neurociencia y el aprendizaje automático?

¿Qué opinas de la biblioteca de aprendizaje profundo de código abierto de Amazon 'DSSTNE' (pronunciado Destiny)?

¿Las herramientas como BigML o Google Prediction API dejarán a los expertos en aprendizaje automático fuera del trabajo?

¿Qué es una explicación intuitiva de los modelos de mezcla gaussiana?

¿Cuáles son algunos casos de uso para el aprendizaje automático en realidad virtual?

¿Cómo deberías comenzar una carrera en aprendizaje profundo?

¿Qué libros o recursos de probabilidad y estadística debo consultar antes de sumergirme en Machine Learning, PNL, minería de datos, etc.? Soy un completo principiante.

Cómo detectar texto / imágenes en una imagen de documento

¿Por qué se utilizan imágenes en escala de grises para el análisis de componentes principales?