1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- '''
- A logistic regression learning algorithm example using TensorFlow library.
- This example is using the MNIST database of handwritten digits
- (http://yann.lecun.com/exdb/mnist/)
- Author: Aymeric Damien
- Project: https://github.com/aymericdamien/TensorFlow-Examples/
- '''
- from __future__ import absolute_import, division, print_function
- import matplotlib.pyplot as plt
- import numpy as np
- import tensorflow as tf
- import tensorflow.contrib.eager as tfe
- # Set Eager API
- tfe.enable_eager_execution()
- # Training Data
- train_X = [3.3, 4.4, 5.5, 6.71, 6.93, 4.168, 9.779, 6.182, 7.59, 2.167,
- 7.042, 10.791, 5.313, 7.997, 5.654, 9.27, 3.1]
- train_Y = [1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221,
- 2.827, 3.465, 1.65, 2.904, 2.42, 2.94, 1.3]
- n_samples = len(train_X)
- # Parameters
- learning_rate = 0.01
- display_step = 100
- num_steps = 1000
- # Weight and Bias
- W = tfe.Variable(np.random.randn())
- b = tfe.Variable(np.random.randn())
- # Linear regression (Wx + b)
- def linear_regression(inputs):
- return inputs * W + b
- # Mean square error
- def mean_square_fn(model_fn, inputs, labels):
- return tf.reduce_sum(tf.pow(model_fn(inputs) - labels, 2)) / (2 * n_samples)
- # SGD Optimizer
- optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
- # Compute gradients
- grad = tfe.implicit_gradients(mean_square_fn)
- # Initial cost, before optimizing
- print("Initial cost= {:.9f}".format(
- mean_square_fn(linear_regression, train_X, train_Y)),
- "W=", W.numpy(), "b=", b.numpy())
- # Training
- for step in range(num_steps):
- optimizer.apply_gradients(grad(linear_regression, train_X, train_Y))
- if (step + 1) % display_step == 0 or step == 0:
- print("Epoch:", '%04d' % (step + 1), "cost=",
- "{:.9f}".format(mean_square_fn(linear_regression, train_X, train_Y)),
- "W=", W.numpy(), "b=", b.numpy())
- # Graphic display
- plt.plot(train_X, train_Y, 'ro', label='Original data')
- plt.plot(train_X, np.array(W * train_X + b), label='Fitted line')
- plt.legend()
- plt.show()
|