Tensorflow - 使神经网络处理简单的数组/列表输入

时间:2016-11-25 00:00:46

标签: neural-network tensorflow

我正在尝试使用Tensorflow创建一个神经网络,但我无法弄清楚如何建立一个简单的简单numpy数组/列表输入的网络。我尝试过Tensorflow教程,但大多数都使用mnist手写数据集。

例如,我想要像这样简单的X和Y数据。

X = np.array(([3, 5], [5, 1], [10, 2]), dtype=float)
Y = np.array(([75], [82], [93]), dtype=float)

其中X包括睡觉时间和花在考试上的时间。 Y由参加考试的相应成绩组成。所有网络都必须包含2个输入节点,3-5个隐藏节点和一个输出节点。

我一直试图遵循的例子是 https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

1 个答案:

答案 0 :(得分:-1)

  

以下内容来自"开始使用Tensorflow"来自Stack Overflow文档   (archived here);版权所有2017 EngineeroMaciej LipinskiNicolasdaolikerStevenMad Matts;领有牌照   在CC BY-SA 3.0下。完整Stack Overflow的存档   文档内容可以在archive.org找到,其中包含此内容   示例由其主题ID索引:856,例如:4069。

Tensorflow不仅仅是一个深度学习框架。它是以并行和分布方式执行一般数学运算的通用计算框架。下面描述了这样的一个例子。

线性回归

通常使用且计算相当简单的基本统计示例是将线拟合到数据集。在张量流中这样做的方法在下面的代码和注释中描述。

(TensorFlow)脚本的主要步骤是:

  1. 声明占位符(x_phy_ph)和变量(Wb
  2. 定义初始化运算符(init
  3. 声明对占位符和变量的操作(y_predlosstrain_op
  4. 创建会话(sess
  5. 运行初始化运算符(sess.run(init)
  6. 运行一些图表操作(例如sess.run([train_op, loss], feed_dict={x_ph: x, y_ph: y})
  7. 图形构造使用Python TensorFlow API完成(也可以使用C ++ TensorFlow API完成)。运行图形将调用低级C ++例程。

    '''
    function: create a linear model which try to fit the line 
              y = x + 2 using SGD optimizer to minimize 
              root-mean-square(RMS) loss function
    
    '''
    import tensorflow as tf
    import numpy as np
    
    # number of epoch
    num_epoch = 100
    
    # training data x and label y
    x = np.array([0., 1., 2., 3.], dtype=np.float32)
    y = np.array([2., 3., 4., 5.], dtype=np.float32)
    
    # convert x and y to 4x1 matrix
    x = np.reshape(x, [4, 1])
    y = np.reshape(y, [4, 1])
    
    # test set(using a little trick)
    x_test = x + 0.5
    y_test = y + 0.5
    
    # This part of the script builds the TensorFlow graph using the Python API
    
    # First declare placeholders for input x and label y
    # Placeholders are TensorFlow variables requiring to be explicitly fed by some 
    # input data
    x_ph = tf.placeholder(tf.float32, shape=[None, 1])
    y_ph = tf.placeholder(tf.float32, shape=[None, 1])
    
    # Variables (if not specified) will be learnt as the GradientDescentOptimizer
    # is run
    # Declare weight variable initialized using a truncated_normal law
    W = tf.Variable(tf.truncated_normal([1, 1], stddev=0.1))
    # Declare bias variable initialized to a constant 0.1
    b = tf.Variable(tf.constant(0.1, shape=[1]))
    
    # Initialize variables just declared 
    init = tf.initialize_all_variables()
    
    # In this part of the script, we build operators storing operations
    # on the previous variables and placeholders.
    # model: y = w * x + b
    y_pred = x_ph * W + b
    
    # loss function
    loss = tf.mul(tf.reduce_mean(tf.square(tf.sub(y_pred, y_ph))), 1. / 2)
    # create training graph
    train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
    # This part of the script runs the TensorFlow graph (variables and operations
    # operators) just built.
    with tf.Session() as sess:
        # initialize all the variables by running the initializer operator
        sess.run(init)
        for epoch in xrange(num_epoch):
            # Run sequentially the train_op and loss operators with
            # x_ph and y_ph placeholders fed by variables x and y
            _, loss_val = sess.run([train_op, loss], feed_dict={x_ph: x, y_ph: y})
            print('epoch %d: loss is %.4f' % (epoch, loss_val))
    
        # see what model do in the test set
        # by evaluating the y_pred operator using the x_test data
        test_val = sess.run(y_pred, feed_dict={x_ph: x_test})
        print('ground truth y is: %s' % y_test.flatten())
        print('predict y is     : %s' % test_val.flatten())