Python 预测不相关数据的张量流神经网络模型 神经网络预测无关数据

Python 预测不相关数据的张量流神经网络模型 神经网络预测无关数据,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,我的问题是物体可以沿着三条路径左、右和之字形运动。我在左边的一条路上训练神经网络。当我在正确的数据中测试同一个神经网络模型时,它的预测非常好,但它不应该这样做。 函数create_train_model(…)用于训练神经网络并获得模型的权重和偏差。函数评估_模型(…)是在给定一组先前点的情况下预测下一点 def create_train_model(Xtrain, ytrain): tf.reset_default_graph() _, num_inputs = np.shap

我的问题是物体可以沿着三条路径左、右和之字形运动。我在左边的一条路上训练神经网络。当我在正确的数据中测试同一个神经网络模型时,它的预测非常好,但它不应该这样做。 函数create_train_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)

您还可以添加用于使用您在帖子中定义的函数开始训练和评估模型的行。您好,我还添加了过程的训练和评估阶段。对于您的
evaluate\u model
函数,您是否可以尝试以下操作:将
X
作为函数参数删除,并移动`X=tf.placeholder(dtype=tf.float32,shape=(None,num_inputs),name='X')`到第一行的evaluate_model函数内部。重新运行代码,您是否仍然得到相同的结果pred_error=evaluate_model(权重左,偏差左,测试右)我绘制了pred_误差图,模型仍然准确地预测了右路径,即使模型参数是左路径