In [1]:
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
import matplotlib.pyplot as plt
plt.style.use('seaborn')
In [2]:
# create data
X = np.linspace(-1, 1, 200)
np.random.shuffle(X) #randomize the data
Y = 2*X + 10 + np.random.normal(0, 0.05, (200,))

# plot data
plt.scatter(X, Y)
plt.show()
In [3]:
# Split off the data
X_train, Y_train = X[:160].reshape((160,1)), Y[:160]
X_test, Y_test = X[160:].reshape((40,1)), Y[160:]
In [5]:
# bulid a neural network from the 1st layer to the last layer
model = tf.keras.models.Sequential([
    layers.Dense(1, activation = None, use_bias = True)
])

# choose loss function and optimisation method
model.compile(optimizer='sgd', loss='mse')

# training
print("=================== Training ===================")
model.fit(X_train, Y_train, epochs=100)
=================== Training ===================
Epoch 1/100
160/160 [==============================] - 0s 746us/sample - loss: 95.8428
Epoch 2/100
160/160 [==============================] - 0s 25us/sample - loss: 78.6160
Epoch 3/100
160/160 [==============================] - 0s 25us/sample - loss: 64.5319
Epoch 4/100
160/160 [==============================] - 0s 50us/sample - loss: 53.0057
Epoch 5/100
160/160 [==============================] - 0s 25us/sample - loss: 43.5562
Epoch 6/100
160/160 [==============================] - 0s 25us/sample - loss: 35.8257
Epoch 7/100
160/160 [==============================] - 0s 32us/sample - loss: 29.5026
Epoch 8/100
160/160 [==============================] - 0s 25us/sample - loss: 24.3067
Epoch 9/100
160/160 [==============================] - 0s 50us/sample - loss: 20.0605
Epoch 10/100
160/160 [==============================] - 0s 25us/sample - loss: 16.5692
Epoch 11/100
160/160 [==============================] - 0s 13us/sample - loss: 13.7102
Epoch 12/100
160/160 [==============================] - 0s 25us/sample - loss: 11.3618
Epoch 13/100
160/160 [==============================] - 0s 36us/sample - loss: 9.4329
Epoch 14/100
160/160 [==============================] - 0s 25us/sample - loss: 7.8503
Epoch 15/100
160/160 [==============================] - 0s 50us/sample - loss: 6.5393
Epoch 16/100
160/160 [==============================] - 0s 25us/sample - loss: 5.4647
Epoch 17/100
160/160 [==============================] - 0s 40us/sample - loss: 4.5777
Epoch 18/100
160/160 [==============================] - 0s 50us/sample - loss: 3.8462
Epoch 19/100
160/160 [==============================] - 0s 31us/sample - loss: 3.2422
Epoch 20/100
160/160 [==============================] - 0s 25us/sample - loss: 2.7423
Epoch 21/100
160/160 [==============================] - 0s 50us/sample - loss: 2.3273
Epoch 22/100
160/160 [==============================] - 0s 25us/sample - loss: 1.9826
Epoch 23/100
160/160 [==============================] - 0s 50us/sample - loss: 1.6954
Epoch 24/100
160/160 [==============================] - 0s 50us/sample - loss: 1.4555
Epoch 25/100
160/160 [==============================] - 0s 25us/sample - loss: 1.2558
Epoch 26/100
160/160 [==============================] - 0s 53us/sample - loss: 1.0882
Epoch 27/100
160/160 [==============================] - 0s 25us/sample - loss: 0.9466
Epoch 28/100
160/160 [==============================] - 0s 50us/sample - loss: 0.8277
Epoch 29/100
160/160 [==============================] - 0s 25us/sample - loss: 0.7267
Epoch 30/100
160/160 [==============================] - 0s 50us/sample - loss: 0.6410
Epoch 31/100
160/160 [==============================] - 0s 25us/sample - loss: 0.5682
Epoch 32/100
160/160 [==============================] - 0s 50us/sample - loss: 0.5057
Epoch 33/100
160/160 [==============================] - 0s 25us/sample - loss: 0.4519
Epoch 34/100
160/160 [==============================] - 0s 51us/sample - loss: 0.4055
Epoch 35/100
160/160 [==============================] - 0s 25us/sample - loss: 0.3650
Epoch 36/100
160/160 [==============================] - 0s 50us/sample - loss: 0.3299
Epoch 37/100
160/160 [==============================] - 0s 25us/sample - loss: 0.2992
Epoch 38/100
160/160 [==============================] - 0s 50us/sample - loss: 0.2721
Epoch 39/100
160/160 [==============================] - 0s 25us/sample - loss: 0.2484
Epoch 40/100
160/160 [==============================] - 0s 50us/sample - loss: 0.2270
Epoch 41/100
160/160 [==============================] - 0s 25us/sample - loss: 0.2082
Epoch 42/100
160/160 [==============================] - 0s 25us/sample - loss: 0.1916
Epoch 43/100
160/160 [==============================] - 0s 50us/sample - loss: 0.1763
Epoch 44/100
160/160 [==============================] - 0s 25us/sample - loss: 0.1626
Epoch 45/100
160/160 [==============================] - 0s 50us/sample - loss: 0.1505
Epoch 46/100
160/160 [==============================] - 0s 25us/sample - loss: 0.1391
Epoch 47/100
160/160 [==============================] - 0s 25us/sample - loss: 0.1289
Epoch 48/100
160/160 [==============================] - 0s 50us/sample - loss: 0.1196
Epoch 49/100
160/160 [==============================] - 0s 25us/sample - loss: 0.1111
Epoch 50/100
160/160 [==============================] - 0s 39us/sample - loss: 0.1033
Epoch 51/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0962
Epoch 52/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0895
Epoch 53/100
160/160 [==============================] - 0s 34us/sample - loss: 0.0835
Epoch 54/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0779
Epoch 55/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0727
Epoch 56/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0678
Epoch 57/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0634
Epoch 58/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0592
Epoch 59/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0554
Epoch 60/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0518
Epoch 61/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0485
Epoch 62/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0454
Epoch 63/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0426
Epoch 64/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0399
Epoch 65/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0374
Epoch 66/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0351
Epoch 67/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0329
Epoch 68/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0309
Epoch 69/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0290
Epoch 70/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0273
Epoch 71/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0256
Epoch 72/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0241
Epoch 73/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0226
Epoch 74/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0213
Epoch 75/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0200
Epoch 76/100
160/160 [==============================] - 0s 55us/sample - loss: 0.0189
Epoch 77/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0178
Epoch 78/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0168
Epoch 79/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0158
Epoch 80/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0149
Epoch 81/100
160/160 [==============================] - 0s 37us/sample - loss: 0.0141
Epoch 82/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0133
Epoch 83/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0126
Epoch 84/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0119
Epoch 85/100
160/160 [==============================] - 0s 10us/sample - loss: 0.0113
Epoch 86/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0107
Epoch 87/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0102
Epoch 88/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0096
Epoch 89/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0092
Epoch 90/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0087
Epoch 91/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0083
Epoch 92/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0079
Epoch 93/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0075
Epoch 94/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0072
Epoch 95/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0069
Epoch 96/100
160/160 [==============================] - 0s 45us/sample - loss: 0.0066
Epoch 97/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0063
Epoch 98/100
160/160 [==============================] - 0s 29us/sample - loss: 0.0060
Epoch 99/100
160/160 [==============================] - 0s 50us/sample - loss: 0.0058
Epoch 100/100
160/160 [==============================] - 0s 25us/sample - loss: 0.0056
Out[5]:
<tensorflow.python.keras.callbacks.History at 0x16e6c0d6748>
In [6]:
# evaluation
print("=================== Evaluation ===================")
cost = model.evaluate(X_test, Y_test)
W, b = model.layers[0].get_weights()
print("Weights=", W, "\nbiases=", b)
=================== Evaluation ===================
40/40 [==============================] - 0s 1ms/sample - loss: 0.0057
Weights= [[1.9032481]] 
biases= [9.999699]
In [7]:
# ploting the prediction function
Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
plt.show()
In [ ]: