رگرسیون خطی با تنسورفلو

آشنایی با کتابخانه تنسورفلو

تنسورفلو، یک کتابخانه ی متن باز یادگیری عمیق برای زبان پایتون ( و زبان ++C) است که توسط تیم Google Brain در نهم نوامبر ۲۰۱۵ معرفی شد. امروزه گوگل از این کتابخانه برای مواردی چون بازشناسی گفتار، Gmail، Google photo و سرویس های جست وجو استفاده می کند.از آنجایی که تنسور فلو بر اساس روش های مبتنی بر یادگیری عمیق طراحی شده است، قابلیت اجرای فعالیتهای پردازشی سنگین مثل روش های خوشه بندی، مدل های گرافیکی، مسائل بهینه سازی و …را دارا می باشد. از ویژگی های این کتابخانه می توان به مشتق گیری اتوماتیک( که نیاز به نوشتن کدهای دستی برای پیاده سازی الگوریتم پس انتشار را رفع می کند)، خاصیت موازی سازی اتوماتیک و بکار گیری GPU در پردازش های سنگین اشاره کرد.یکی از قابلیت های خوب تنسورفلو، ابزار TensorBoard است. تنسوربرد ابزاری است که به برنامه نویس، اجازه ی مصورسازی گراف محاسباتی را می دهد. گرافی که مبین مسیر و چارچوب کلی محاسباتی و رفتاری مسئله ی مورد بررسی است.تنسور فلو با تعریف کردن یک گراف عملیاتی داده ای کار می کند.گرافی که ضلع های آن، معرف داده ها و گره های آن معرف عملیات ها است. در تنسور فلو، برنامه نویس، با استفاده از تنسورها یک گراف محاسباتی را تعریف می کند.

تنسورفلو - تنسوربرد

نصب و راه اندازی

برای نصب این کتابخانه، یک راهنمای آموزشی که بطور پیوسته و مداوم بروز رسانی می شود، در آدرس زیر وجود دارد:

https://www.tensorflow.org/get_started

در ادامه یک مثال از کتابخانه ی تنسور فلو ارائه شده است.

رگریسیون خطی در تنسور فلو

رگریسیون خطی در کتابخانه ی تنسورفلو به شکلی که در ادامه بیان خواهیم کرد تعریف می شود:

در ابتدا کتابخانه های لازم برای اجرا را فراخوانی میکنیم و سپس داده های مورد نظر را فراخوانی و به دو دسته ی داده های آموزش و دادهای تست تقسیم می کنیم:

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# NEW DATA
data_x = np.linspace(1, 8, 100)[:, np.newaxis]
data_y = np.polyval([1, -14, 59, -70], data_x) 
        + ۱٫۵ * np.sin(data_x) + np.random.randn(100, 1)
# --------
model_order = 5
data_x = np.power(data_x, range(model_order))
data_x /= np.max(data_x, axis=0)
order = np.random.permutation(len(data_x))
portion = 20
test_x = data_x[order[:portion]]
test_y = data_y[order[:portion]]
train_x = data_x[order[portion:]]
train_y = data_y[order[portion:]]

در ادامه باید مدل خود را یا همان گراف مسئله را تعریف کنیم. برای این کار ابتدا نگهدارنده های ورودی ها و خروجی هایمان را تعریف می کنیم که برای پیاده سازی آن باید نوع داده ها(float32)، شکل داده ها را به صورت زیر تعریف کنیم:

with tf.name_scope("IO"):
    inputs = tf.placeholder(tf.float32, [None, model_order], name="X")
    outputs = tf.placeholder(tf.float32, [None, 1], name="Yhat")

در ادامه مدل رگریسیون خطی را تعریف می کنیم:

with tf.name_scope("LR"):
    W = tf.Variable(tf.zeros([model_order, 1], dtype=tf.float32), name="W")
    y = tf.matmul(inputs, W)

و در نهایت تابع هزینه و بهینه ساز خود را تعریف می نماییم:

with tf.name_scope("train"):
    learning_rate = tf.Variable(0.5, trainable=False)
    cost_op = tf.reduce_mean(tf.pow(y-outputs, 2))
    train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost_op)

همانطور که در بالا مشاهده نمودید، نیازی به تعریف گرادیان یا بروزرسانی مداوم پارامترها نبود. حال به پیاده سازی اجرایی مدل خودمان در GPU با استفاده از داده های آموزش می پردازیم و به صورت زیر عمل می کنیم:

tolerance = 1e-3
# Perform Stochastic Gradient Descent
epochs = 1
last_cost = 0
alpha = 0.4
max_epochs = 50000
sess = tf.Session() # Create TensorFlow session
print "Beginning Training"
with sess.as_default():
    init = tf.initialize_all_variables()
    sess.run(init)
    sess.run(tf.assign(learning_rate, alpha))
    while True:
        # Execute Gradient Descent
        sess.run(train_op, feed_dict={inputs: train_x, outputs: train_y})
        # Keep track of our performance
        if epochs%100==0:
            cost = sess.run(cost_op, feed_dict={inputs: train_x, outputs: train_y})
            print "Epoch: %d - Error: %.4f" %(epochs, cost)
            # Stopping Condition
            if abs(last_cost - cost) < tolerance or epochs > max_epochs:
                print "Converged."
                break
            last_cost = cost
        epochs += 1
    w = W.eval()
    print "w =", w
    print "Test Cost =", sess.run(cost_op, feed_dict={inputs: test_x, outputs: test_y})

نتیجه ی اعمال داده های آموزش به شبکه به صورت زیر است:

رگرسیون خطی با تنسورفلو

با استفاده از TensorBoard مدل ما به صورت زیر است:

گراف شبکه عصبی برای رگرسیون

منبع:

https://www.cs.toronto.edu/~frossard/post/tensorflow/

همچنین ببینید

فناوری تشخیص چهره و کاربردهای آن، تاریخچه تکنولوژی تشخیص چهره

فناوری تشخیص چهره و کاربردهای آن + تاریخچه

فناوری تشخیص چهره یک فناوری بیومتریک است که با استفاده از تجزیه و تحلیل الگوهایی …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *