亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TensorFlow中怎么實現一個多元線性回歸分類器

發布時間:2021-08-09 13:44:16 來源:億速云 閱讀:116 作者:Leah 欄目:大數據

本篇文章為大家展示了TensorFlow中怎么實現一個多元線性回歸分類器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

# 導入需要的模塊

# - * - coding: utf-8 - * -
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn import datasets
import os

# 這個函數是為了利用sklearn獲取iris數據,然后保存到本地后面用。

def make_iris():
   iris = datasets.load_iris()
   x = pd.DataFrame(iris.data)
   y = pd.DataFrame(iris.target).values
   y_onehot = tf.one_hot(y, 3)
   sess = tf.InteractiveSession()
   y_onehot_value = sess.run(y_onehot).reshape((150, 3))
   y_onehot_value = pd.DataFrame(y_onehot_value)
   x.to_csv("iris_x.csv", sep=',', header=None, index=None)
   y_onehot_value.to_csv("iris_y.csv", sep=',', header=None, index=None)
   

# 定義模型,這里要分清楚,in_size,out_size分別代表什么的大小,比如對于iris數據集,有4個自變量,1個因變量,但是我們把label經過one_hot編碼之后,label就變成了3維。所以這里In_size就是訓練數據的維度,也就是變量的個數。而out_size是輸出的維度,就是因變量的維度,所以是3.

一般對于多元線性回歸模型,可以寫成矩陣的形式就是,Y=WX+b,這里W是4x3的,x是150x4的,b是150x3的,所以Y的維度就是(150x4)x(4x3)+(150x3)=150x3(屬于某個類別的概率),模型最后輸出是softmax多分類函數,所以最后每個樣本都會有一個屬于不同類別的概率值。

def model(inputs, in_size, out_size):
   Weights = tf.Variable(tf.random_normal([in_size, out_size]))
   biases = tf.Variable(tf.zeros([1, out_size]))
   outputs = tf.nn.softmax(tf.matmul(inputs, Weights) + biases)
   return outputs
   
 

# 定義模型訓練函數
def train():
   # 首先是讀取數據,用上面那個函數保存的數據,
   # 把訓練數據讀進來,因為pandas讀取的是
   # DataFrame對象,通過values屬性轉換為numpy.ndarry類型。
   x_data = pd.read_csv("iris_x.csv", header=None).values
   y_data = pd.read_csv("iris_y.csv", header=None).values
   # 接下來是把數據分為訓練集和測試集。
   train_x = x_data[0:120, :]
   train_y = y_data[0:120, :]

   test_x = x_data[120:151, :]
   test_y = y_data[120:151, :]

   print train_x.shape
   print test_x.shape
   print train_y.shape
   print test_y.shape
   #定義placeholder,這也可以不定義,后面就不
   # 用顯示的feed了,直接run優化目標就行。這
   # 里還是要注意holder的維度代表的含義,別稀里糊涂的。
   x_data_holder = tf.placeholder(tf.float32, [None, 4])
   y_data_holder = tf.placeholder(tf.float32, [None, 3])
   # 調用模型,輸出預測結果
   y_prediction = model(x_data_holder, 4, 3)
   #定義交叉熵損失函數
   cross_entropy = tf.reduce_mean(
       -tf.reduce_sum(y_data_holder *
                      tf.log(y_prediction), reduction_indices=[1]))
   # 用梯度下降法求解,使得損失函數最小。
   train_step = tf.train.GradientDescentOptimizer(0.1)\
       .minimize(cross_entropy)
   # 啟動session。
   with tf.Session() as sess:
       init = tf.global_variables_initializer()
       sess.run(init)
       epoch = 2000
       for e in range(epoch):
           sess.run(train_step,
                    feed_dict={x_data_holder: train_x,
                           y_data_holder: train_y})
           # 每隔50次,計算一下損失,注意這里的損失是訓
           # 練數據的損失,而且這個損失是單步的損失,
           # 不是全部數據的損失。
           if e % 50 == 0:
               train_loss = sess.run(cross_entropy,
                       feed_dict={x_data_holder: train_x,
                              y_data_holder: train_y})

               y_pre = sess.run(y_prediction,
                   feed_dict={x_data_holder: test_x})
               correct_prediction = tf.equal(tf.argmax(y_pre, 1),
                          tf.argmax(test_y, 1))
           # eval函數可以將tensor類型轉換為具體的值,也可以不運行。
               # print correct_prediction.eval(session=sess)
               accuracy = tf.reduce_mean(tf.cast(correct_prediction,
                                     tf.float32))
           # 最后用測試數據,計算一下測試數據的預測精度。
               test_acc = sess.run(accuracy,
                        feed_dict={x_data_holder: test_x,
                            y_data_holder: test_y})
               print "acc: {}; loss: {}".format(test_acc, train_loss)
     # 要計算全部數據的損失,需要在最后再run一下損失。
       training_cost = sess.run(cross_entropy,
                   feed_dict={x_data_holder: train_x,
                             y_data_holder: train_y})
       print "Training cost={}".format(training_cost)

if __name__ == "__main__":
   train()

上述內容就是TensorFlow中怎么實現一個多元線性回歸分類器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

轮台县| 建德市| 蓝山县| 伊川县| 卓资县| 德保县| 平顶山市| 黄浦区| 关岭| 米林县| 抚宁县| 三原县| 宁远县| 长治市| 剑阁县| 白城市| 兴山县| 博爱县| 黄浦区| 吉木乃县| 通榆县| 蓝田县| 松原市| 公主岭市| 浙江省| 乌海市| 金山区| 湖北省| 泸西县| 平塘县| 永顺县| 灵寿县| 嘉定区| 杨浦区| 曲水县| 镇安县| 大宁县| 腾冲县| 长岛县| 井研县| 乌拉特中旗|