回覆列表
  • 1 # 小鴿子看世界

    TensorFlow更為基礎,基本上是使用樂高積木幫助使用者實現機器學習演算法,scikit-learn則提供了許多現成的演算法,例如支援向量機、隨機森林演算法、邏輯迴歸等分類演算法。如果你想實現深度學習演算法的話,那麼絕對推薦使用TensorFlow,因為它可以讓你利用圖形處理器的進行更有效的培訓。

    為了讓大家更好地瞭解這兩種人工智慧學習系統,我透過scikit-learn在Iris資料集上擬合了一個softmax迴歸模型:

    此外,我還用了一個小幫手函式來繪製2D決策平面:

    看起來很簡單,是吧?:) 現在,如果想透過TensorFlow擬合softmax迴歸模型,必須首先“構建”演算法。雖然聽起來很複雜,但實際操作起來就會發現其實沒那麼難。

    TensorFlow有許多“方便”的功能和實用程式。例如,如果想使用機器學習中的最最佳化方法——梯度下降法,其核心或具體計算可能如下:

    00001. #構建圖

    00002. g = tf.Graph()

    00003. with g.as_default():

    00004.

    00005. 如果 init_weights:

    00006. self._n_classes = np.max(y) + 1

    00007. self._n_features = X.shape[1]

    00008. tf_weights_, tf_biases_ = self._initialize_weights(

    00009. n_features=self._n_features,

    00010. n_classes=self._n_classes)

    00011. self.cost_ = []

    00012. else:

    00013. tf_weights_ = tf.Variable(self.weights_)

    00014. tf_biases_ = tf.Variable(self.biases_)

    00015.

    00016. # 準備訓練樣本

    00017. y_enc = self._one_hot(y, self._n_classes)

    00018. n_idx = list(range(y.shape[0]))

    00019. tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype)

    00020. tf_y = tf.convert_to_tensor(value=y_enc, dtype=self.dtype)

    00021. tf_idx = tf.placeholder(tf.int32,

    00022. shape=[int(y.shape[0] / n_batches)])

    00023. X_batch = tf.gather(params=tf_X, indices=tf_idx)

    00024. y_batch = tf.gather(params=tf_y, indices=tf_idx)

    00025.

    00026. #設定圖表以最小化交叉熵成本

    00027. logits = tf.matmul(X_batch, tf_weights_) + tf_biases_

    00028. cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits,

    00029. y_batch)

    00030. cost = tf.reduce_mean(cross_entropy)

    00031. optimizer = tf.train.GradientDescentOptimizer(

    00032. learning_rate=self.eta)

    00033. train = optimizer.minimize(cost)

    00034. 聽

    00035. #初始化變數

    00036. init = tf.initialize_all_variables()

    我們可以進行如下訓練:

    00001. # 啟動圖

    00002. with tf.Session(graph=g) as sess:

    00003. sess.run(init)

    00004. self.init_time_ = time()

    00005. for epoch in range(self.epochs):

    00006. if self.minibatches > 1:

    00007. n_idx = np.random.permutation(n_idx)

    00008. minis = np.array_split(n_idx, self.minibatches)

    00009. costs = []

    00010. for idx in minis:

    00011. _, c = sess.run([train, cost], feed_dict={tf_idx: idx})

    00012. costs.append(c)

    為了方便演示,我已經用TensorFlow實現了面向物件的softmax迴歸,這有點類似於scikit-learn。 如果你有興趣的話,可以在這裡找到完整的程式碼示例:rasbt / mlxtend

  • 2 # 你看我獨角獸嗎

    就目前來看,TensorFlow適合做大型機器學習開發專案的時候使用,其分散式框架和用python做client介面呼叫c++的執行速度可以讓模型的執行上達到工業水準;

    sklearn更適合在開發人員或更入門機器學習的人去快速得到結果反饋,並且其api呼叫的方式十分友好,fit(),predict(),score()基本能滿足需求,而且資料預處理模組和評價模組可以很好地幫助模型進行調優。

    所以TensorFlow和sklearn各有長處,應當在自己開發階段擇優選擇。

  • 中秋節和大豐收的關聯?
  • 農業的農字可以分解成幾個字?