In [1]:
from node import *

In [2]:
x, y, z = Input(), Input(), Input()

f = Add(x, y, z)

feed_dict = {x: 4, y: 5, z: 10}

graph = topological_sort(feed_dict)
output = forward_pass(f, graph)

# should output 19
print("{} + {} + {} = {} (according to miniflow)".format(feed_dict[x], feed_dict[y], feed_dict[z], output))


4 + 5 + 10 = 19 (according to miniflow)

In [3]:
x, y, z = Input(), Input(), Input()

f = Mul(x, y, z)

feed_dict = {x: 4, y: 5, z: 10}

graph = topological_sort(feed_dict)
output = forward_pass(f, graph)

# should output 19
print("{} * {} * {} = {} (according to miniflow)".format(feed_dict[x], feed_dict[y], feed_dict[z], output))


4 * 5 * 10 = 200 (according to miniflow)

In [4]:
inputs, weights, bias = Input(), Input(), Input()

f = Linear(inputs, weights, bias)

feed_dict = {
    inputs: [6, 14, 3],
    weights: [0.5, 0.25, 1.4],
    bias: 2
}

graph = topological_sort(feed_dict)
output = forward_pass(f, graph)

print(output) # should be 12.7 with this example


12.7

In [1]:
import numpy as np
from node import *

X, W, b = Input(), Input(), Input()

f = Linear(X, W, b)

X_ = np.array([[-1., -2.], [-1, -2]])
W_ = np.array([[2., -3], [2., -3]])
b_ = np.array([-3., -5])

feed_dict = {X: X_, W: W_, b: b_}

graph = topological_sort(feed_dict)
output = forward_pass(f, graph)

"""
Output should be:
[[-9., 4.],
[-9., 4.]]
"""
print(output)


[[-9.  4.]
 [-9.  4.]]

In [1]:
"""
This network feeds the output of a linear transform
to the sigmoid function.

Finish implementing the Sigmoid class in miniflow.py!

Feel free to play around with this network, too!
"""

import numpy as np
from node import *

X, W, b = Input(), Input(), Input()

f = Linear(X, W, b)
g = Sigmoid(f)

X_ = np.array([[-1., -2.], [-1, -2]])
W_ = np.array([[2., -3], [2., -3]])
b_ = np.array([-3., -5])

feed_dict = {X: X_, W: W_, b: b_}

graph = topological_sort(feed_dict)
output = forward_pass(g, graph)

"""
Output should be:
[[  1.23394576e-04   9.82013790e-01]
 [  1.23394576e-04   9.82013790e-01]]
"""
print(output)


<class 'numpy.ndarray'>
[[  1.23394576e-04   9.82013790e-01]
 [  1.23394576e-04   9.82013790e-01]]

In [1]:
"""
Test your MSE method with this script!

No changes necessary, but feel free to play
with this script to test your network.
"""

import numpy as np
from node import *

y, a = Input(), Input()
cost = MSE(y, a)

y_ = np.array([1, 2, 3])
a_ = np.array([4.5, 5, 10])

feed_dict = {y: y_, a: a_}
graph = topological_sort(feed_dict)
# forward pass
forward_pass(graph)

"""
Expected output

23.4166666667
"""
print(cost.value)


[[-3.5]
 [-3. ]
 [-7. ]]
23.4166666667

In [17]:
import random

def gradient_descent_update(x, gradx, learning_rate):
    
    return x - learning_rate * gradx

def f(x):
    """
    Quadratic function.

    It's easy to see the minimum value of the function
    is 5 when is x=0.
    """
    return x ** 2 - 5

def df(x):
    """
    Derivative of `f` with respect to `x`.
    """
    return 2 * x

x = random.randint(1, 10000)

learning_rate = 0.1
epochs = 100
for i in range(epochs+1):
    cost = f(x)
    gradx = df(x)
    print("EPOCH {}: Cost = {:.3f}, x = {:.3f}".format(i, cost, gradx))
    x = gradient_descent_update(x, gradx, learning_rate)


EPOCH 0: Cost = 31292831.000, x = 11188.000
EPOCH 1: Cost = 20027410.040, x = 8950.400
EPOCH 2: Cost = 12817540.626, x = 7160.320
EPOCH 3: Cost = 8203224.200, x = 5728.256
EPOCH 4: Cost = 5250061.688, x = 4582.605
EPOCH 5: Cost = 3360037.680, x = 3666.084
EPOCH 6: Cost = 2150422.316, x = 2932.867
EPOCH 7: Cost = 1376268.482, x = 2346.294
EPOCH 8: Cost = 880810.028, x = 1877.035
EPOCH 9: Cost = 563716.618, x = 1501.628
EPOCH 10: Cost = 360776.836, x = 1201.302
EPOCH 11: Cost = 230895.375, x = 961.042
EPOCH 12: Cost = 147771.240, x = 768.834
EPOCH 13: Cost = 94571.794, x = 615.067
EPOCH 14: Cost = 60524.148, x = 492.053
EPOCH 15: Cost = 38733.655, x = 393.643
EPOCH 16: Cost = 24787.739, x = 314.914
EPOCH 17: Cost = 15862.353, x = 251.931
EPOCH 18: Cost = 10150.106, x = 201.545
EPOCH 19: Cost = 6494.268, x = 161.236
EPOCH 20: Cost = 4154.531, x = 128.989
EPOCH 21: Cost = 2657.100, x = 103.191
EPOCH 22: Cost = 1698.744, x = 82.553
EPOCH 23: Cost = 1085.396, x = 66.042
EPOCH 24: Cost = 692.854, x = 52.834
EPOCH 25: Cost = 441.626, x = 42.267
EPOCH 26: Cost = 280.841, x = 33.814
EPOCH 27: Cost = 177.938, x = 27.051
EPOCH 28: Cost = 112.080, x = 21.641
EPOCH 29: Cost = 69.931, x = 17.313
EPOCH 30: Cost = 42.956, x = 13.850
EPOCH 31: Cost = 25.692, x = 11.080
EPOCH 32: Cost = 14.643, x = 8.864
EPOCH 33: Cost = 7.571, x = 7.091
EPOCH 34: Cost = 3.046, x = 5.673
EPOCH 35: Cost = 0.149, x = 4.538
EPOCH 36: Cost = -1.704, x = 3.631
EPOCH 37: Cost = -2.891, x = 2.905
EPOCH 38: Cost = -3.650, x = 2.324
EPOCH 39: Cost = -4.136, x = 1.859
EPOCH 40: Cost = -4.447, x = 1.487
EPOCH 41: Cost = -4.646, x = 1.190
EPOCH 42: Cost = -4.774, x = 0.952
EPOCH 43: Cost = -4.855, x = 0.761
EPOCH 44: Cost = -4.907, x = 0.609
EPOCH 45: Cost = -4.941, x = 0.487
EPOCH 46: Cost = -4.962, x = 0.390
EPOCH 47: Cost = -4.976, x = 0.312
EPOCH 48: Cost = -4.984, x = 0.250
EPOCH 49: Cost = -4.990, x = 0.200
EPOCH 50: Cost = -4.994, x = 0.160
EPOCH 51: Cost = -4.996, x = 0.128
EPOCH 52: Cost = -4.997, x = 0.102
EPOCH 53: Cost = -4.998, x = 0.082
EPOCH 54: Cost = -4.999, x = 0.065
EPOCH 55: Cost = -4.999, x = 0.052
EPOCH 56: Cost = -5.000, x = 0.042
EPOCH 57: Cost = -5.000, x = 0.033
EPOCH 58: Cost = -5.000, x = 0.027
EPOCH 59: Cost = -5.000, x = 0.021
EPOCH 60: Cost = -5.000, x = 0.017
EPOCH 61: Cost = -5.000, x = 0.014
EPOCH 62: Cost = -5.000, x = 0.011
EPOCH 63: Cost = -5.000, x = 0.009
EPOCH 64: Cost = -5.000, x = 0.007
EPOCH 65: Cost = -5.000, x = 0.006
EPOCH 66: Cost = -5.000, x = 0.004
EPOCH 67: Cost = -5.000, x = 0.004
EPOCH 68: Cost = -5.000, x = 0.003
EPOCH 69: Cost = -5.000, x = 0.002
EPOCH 70: Cost = -5.000, x = 0.002
EPOCH 71: Cost = -5.000, x = 0.001
EPOCH 72: Cost = -5.000, x = 0.001
EPOCH 73: Cost = -5.000, x = 0.001
EPOCH 74: Cost = -5.000, x = 0.001
EPOCH 75: Cost = -5.000, x = 0.001
EPOCH 76: Cost = -5.000, x = 0.000
EPOCH 77: Cost = -5.000, x = 0.000
EPOCH 78: Cost = -5.000, x = 0.000
EPOCH 79: Cost = -5.000, x = 0.000
EPOCH 80: Cost = -5.000, x = 0.000
EPOCH 81: Cost = -5.000, x = 0.000
EPOCH 82: Cost = -5.000, x = 0.000
EPOCH 83: Cost = -5.000, x = 0.000
EPOCH 84: Cost = -5.000, x = 0.000
EPOCH 85: Cost = -5.000, x = 0.000
EPOCH 86: Cost = -5.000, x = 0.000
EPOCH 87: Cost = -5.000, x = 0.000
EPOCH 88: Cost = -5.000, x = 0.000
EPOCH 89: Cost = -5.000, x = 0.000
EPOCH 90: Cost = -5.000, x = 0.000
EPOCH 91: Cost = -5.000, x = 0.000
EPOCH 92: Cost = -5.000, x = 0.000
EPOCH 93: Cost = -5.000, x = 0.000
EPOCH 94: Cost = -5.000, x = 0.000
EPOCH 95: Cost = -5.000, x = 0.000
EPOCH 96: Cost = -5.000, x = 0.000
EPOCH 97: Cost = -5.000, x = 0.000
EPOCH 98: Cost = -5.000, x = 0.000
EPOCH 99: Cost = -5.000, x = 0.000
EPOCH 100: Cost = -5.000, x = 0.000

In [ ]: