首页 > 解决方案 > 预测不相关数据的张量流神经网络模型

问题描述

神经网络预测无关数据

我的问题是对象可以遵循左、右和之字形的 3 条路径。假设左,我在一条路径上训练神经网络。当我在 Right 数据中测试相同的神经网络模型时,它的预测非常好,但它不应该那样做。函数 create_train_model(...) 用于训练神经网络并获取模型的权重和偏差。并且函数 evaluate_model(...) 是在给定一组先前点的情况下预测下一个点。

def create_train_model(Xtrain, ytrain):
    tf.reset_default_graph()

    _, num_inputs = np.shape(Xtrain)
    _, num_outputs = np.shape(ytrain)

    keep_prob = 0.9

    weights = {
        'h1': tf.Variable(tf.random_normal([num_inputs, n_hidden_1], 0, 0.1)),
        'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], 0, 0.1)),
        'out': tf.Variable(tf.random_normal([n_hidden_2, num_outputs], 0, 0.1))
    }

    biases = {
        'b1': tf.Variable(tf.random_normal([n_hidden_1], 0, 0.1)),
        'b2': tf.Variable(tf.random_normal([n_hidden_2], 0, 0.1)),
        'out': tf.Variable(tf.random_normal([num_outputs], 0, 0.1))
    }

    X = tf.placeholder(dtype=tf.float32, shape=(None, num_inputs),  name='X')
    y = tf.placeholder(dtype=tf.float32, shape=(None, num_outputs), name='y')

    # Hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(X, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)

    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)

    # Output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    cost = tf.reduce_sum(tf.square(out_layer - y))
    # # cost = tf.losses.huber_loss(y, out_layer)
    # # cost = tf.losses.mean_squared_error(y, out_layer)
    # cost = tf.losses.hinge_loss(y, out_layer)


    optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)

    # Initialize variables and run session
    init = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init)

        for i in range(epochs):
            _, c = sess.run([optimizer, cost],
                               feed_dict={X: Xtrain, y: ytrain})

        weights = sess.run(weights)
        biases = sess.run(biases)
    sess.close()

    return weights, biases

def evaluate_model(w, b, X, Xtest):
    weights = {
        'h1': tf.Variable(w['h1']),
        'h2': tf.Variable(w['h2']),
        'out': tf.Variable(w['out'])
    }

    biases = {
        'b1': tf.Variable(b['b1']),
        'b2': tf.Variable(b['b2']),
        'out': tf.Variable(b['out'])
    }

    layer_1 = tf.add(tf.matmul(X, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)

    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)

    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']

    init = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(weights))

        print(sess.run(biases))

        pred = sess.run(out_layer, feed_dict={X: Xtest})

    return pred

数据在每个时间序列 1,2,3,...N 中具有 (x,y) 坐标,并带有标签。我通过查看该标签的标签索引和相应的坐标来获得左侧的数据。并且时间转移它们以获得神经网络的功能。对于 4 个时移,我将有 8 个特征数据,神经网络的输出是该运动的下一个点。请帮忙,我被困在这很长时间了,我尝试了一切都没有进展。

训练模型:

    time_history = 4
    Train_Left, Train_Waggle, Train_Right = seperate_class_data(xy_train, time_history)

    Train_Right_X = Train_Right[0]
    Train_Right_Y = Train_Right[1]


    Train_Left_X = Train_Left[0]
    Train_Left_Y = Train_Left[1]

    Train_Waggle_X = Train_Waggle[0]
    Train_Waggle_Y = Train_Waggle[1]

    num_inputs = np.shape(Train_Left_X)[1]
    num_outputs = np.shape(Train_Left_Y)[1]


    print("Training Left Model")
    weights_left, biases_left = create_train_model(Train_Left_X, Train_Left_Y)
    weights_waggle, biases_waggle = create_train_model(Train_Waggle_X, Train_Waggle_Y)

评估模型:

    X = tf.placeholder(dtype=tf.float32, shape=(None, num_inputs),  name='X')
pred_left = evaluate_model(weights_left, biases_left, X, Test_Left_X)
pred_waggle = evaluate_model(weights_waggle, biases_waggle, X, Test_Waggle_X)

标签: pythontensorflowneural-network

解决方案


推荐阅读