husky66 2021-03-10 16:15 采纳率: 57.1%
浏览 56

数据变化较小,BP神经网络怎么拟合

def BP_Net(x, y, lr=0.01, hidden=20, loop=2000):
    X = tf.compat.v1.placeholder(tf.float32, [None, 1])
    Y = tf.compat.v1.placeholder(tf.float32, [None, 1])

    # 输入层到隐藏层
    W1 = tf.compat.v1.Variable(tf.compat.v1.random_normal([1, hidden]))
    B1 = tf.compat.v1.Variable(tf.compat.v1.zeros([1, hidden]))
    L1 = tf.compat.v1.nn.tanh(tf.matmul(X, W1) + B1)

    # 隐藏层到输出层
    W2 = tf.compat.v1.Variable(tf.compat.v1.random_normal([hidden, 1]))
    B2 = tf.compat.v1.Variable(tf.compat.v1.zeros([1, 1]))
    L2 = tf.matmul(L1, W2) + B2

    # 二次代价函数
    loss = tf.reduce_mean(tf.square(Y - L2))
    # 梯度下降法
    train_step = tf.compat.v1.train.GradientDescentOptimizer(lr).minimize(loss)

    with tf.compat.v1.Session() as sess:
        sess.run(tf.compat.v1.global_variables_initializer())
        for i in range(loop):
            sess.run(train_step, feed_dict={X: x, Y: y})
            loss1 = sess.run(loss, feed_dict={X: x, Y: y})
            print(f"loss:{loss1}")
        predict = sess.run(L2, feed_dict={X: x})
        print(f"predict:{predict}")
        picture(x, y, predict)

def picture(x, y, predict):
    plt.figure()
    plt.plot(x, y, label="原始数据")
    plt.plot(x, predict, label="预测数据")
    plt.legend()
    plt.show()


if __name__ == "__main__":
    X = np.array(list(np.arange(19, 20, 0.01))).reshape([-1, 1])
    Y = (X * X + 1).reshape([-1, 1])
    # 归一化
    # min_max_scaler = MinMaxScaler()
    # Y = min_max_scaler.fit_transform(Y)

    BP_Net(X, Y, lr=0.001, hidden=20, loop=4000)

像X这种数据变化较小,用BP神经网络怎么调参数都不行,都不能拟合

这种情况怎么办?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 mmocr的训练错误,结果全为0
    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀