示例#1
0
def main():
    epoch_number = 30
    learning_rate = 0.01
    train_features = [1.0, 2.0, 3.0, 4.0, 5.0]
    train_labels = [10.0, 20.0, 30.0, 40.0, 50.0]

    weights = ops.VariableOp(0.0)
    bias = ops.VariableOp(0.0)
    x = ops.PlaceholderOp(float)
    y = ops.PlaceholderOp(float)
    predict = weights * x + bias
    loss = (y - predict)**2
    sgd_optimizer = optimizer.GradientDescentOptimizer(learning_rate)
    train_op = sgd_optimizer.minimize(loss)

    with session.Session() as sess:
        for epoch_index in range(epoch_number):
            # Take one sample from train dataset
            sample_number = len(train_features)
            train_feature = train_features[epoch_index % sample_number]
            train_label = train_labels[epoch_index % sample_number]

            # Update model variables and print loss
            sess.run(train_op, feed_dict={x: train_feature, y: train_label})
            loss_value = sess.run(loss, feed_dict={x: 1.0, y: 10.0})
            print("Epoch: {}, loss: {}, weight: {}, bias: {}".format(
                epoch_index, loss_value, weights.get_value(),
                bias.get_value()))
示例#2
0
def main1():
    # y = 3 * x**3 + 2 * x**2 + x + 10
    # y' = 9 * x**2 + 4 * x + 1
    print("Formula: {}".format("y = 3 * x**3 + 2 * x**2 + x + 10"))
    print("Formula gradient: {}".format("y' = 9 * x**2 + 4 * x + 1"))

    x = 1
    first_item = ops.MultipleOp(3, ops.CubicOp(x))
    second_item = ops.MultipleOp(2, ops.SquareOp(x))
    third_item = ops.VariableOp(x)
    forth_item = ops.ConstantOp(10)
    y = ops.AddNOp(ops.AddOp(first_item, second_item), third_item, forth_item)

    #import ipdb;ipdb.set_trace()

    # Should be "X: 1, forward: 16.0, grad: 14.0"
    print("X: {}, forward: {}, grad: {}".format(x, y.forward(), y.grad()))

    # Build the graph
    name_op_map = {}
    coefficient1 = ops.ConstantOp(3)
    cubic1 = ops.CubicOp(x)
    coefficient2 = ops.ConstantOp(2)
    square1 = ops.SquareOp(x)
    multiple1 = ops.MultipleOp(coefficient1, cubic1)
    multiple2 = ops.MultipleOp(coefficient2, square1)
    variable1 = ops.VariableOp(x)
    constant1 = ops.ConstantOp(10)
    add1 = ops.AddNOp(multiple1, multiple2, variable1, constant1)
    add2 = ops.AddNOp(multiple1, multiple2)

    name_op_map["coefficient1"] = coefficient1
    name_op_map["cubic1"] = cubic1
    name_op_map["coefficient2"] = coefficient2
    name_op_map["square1"] = square1
    name_op_map["multiple1"] = multiple1
    name_op_map["multiple2"] = multiple2
    name_op_map["variable1"] = variable1
    name_op_map["constant1"] = constant1
    name_op_map["add1"] = add1
    name_op_map["add2"] = add2

    print("add1 forward: {}, backward: {}".format(
        name_op_map["add1"].forward(), name_op_map["add1"].grad()))
    print("add2 forward: {}, backward: {}".format(
        name_op_map["add2"].forward(), name_op_map["add2"].grad()))
    '''
  # Automatically update weights with gradient
  learning_rate = 0.01
  epoch_number = 10
  label = 10
  weights_value = 3

  # y = weights * x**3 + 2 * x**2 + x + 10
  x = ops.PlaceholderOp()
  weights = ops.VariableOp(weights_value)
  cubic1 = ops.CubicOp(x)
  coefficient2 = ops.ConstantOp(2)
  square1 = ops.SquareOp(x)
  multiple1 = ops.MultipleOp(weights, cubic1)
  multiple2 = ops.MultipleOp(coefficient2, square1)
  constant1 = ops.ConstantOp(10)
  add1 = ops.AddNOp(multiple1, multiple2, x, constant1)

  for epoch_index in range(epoch_number):
    x.set_value(1)

    grad = add1.grad()
    weights_value -= learning_rate * grad
    weights.set_value(weights_value)

    predict = add1.forward()
    loss = predict - label
    print("Epoch: {}, loss: {}, grad: {}, weights: {}, predict: {}".format(
        epoch_index, loss, grad, weights_value, predict))
  '''

    # Run with session
    hello = ops.ConstantOp("Hello, TensorFlow! -- by MinialFlow")
    sess = session.Session()
    print(sess.run(hello))
    a = ops.ConstantOp(10)
    b = ops.ConstantOp(32)
    c = ops.AddOp(a, b)
    print(sess.run(c))

    # Run with session and feed_dict
    a = ops.PlaceholderOp()
    b = ops.ConstantOp(32)
    c = a + b
    sess = session.Session()
    print(sess.run(c, feed_dict={a: 10}))
    print(sess.run(c, feed_dict={a.name: 10}))

    # Run with python operators
    a = ops.ConstantOp(32.0)
    b = ops.ConstantOp(10.0)
    print(sess.run(a + b))
    print(sess.run(a - b))
    print(sess.run(a * b))
    print(sess.run(a / b))

    # Operate with primitive variables
    a = ops.ConstantOp(32.0)
    b = 10.0
    print(sess.run(a + b))
    print(sess.run(a - b))
    print(sess.run(a * b))
    print(sess.run(a / b))

    # Operate by primitive variables
    a = 32.0
    b = ops.ConstantOp(10.0)
    print(sess.run(a + b))
    print(sess.run(a - b))
    print(sess.run(a * b))
    print(sess.run(a / b))