You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

神经网络实现除法输出固定值问题排查与解决求助

神经网络实现乘除运算的问题排查

我尝试用基于平方差公式的方法开发实现两数乘除的神经网络,乘法部分运行正常,但除法部分存在问题:每次运行程序时,每组输入都会得到一个近似固定的输出值。之前在Stack Exchange提问后取得了一定进展,但仍有问题,故再次求助。

神经网络代码

import tensorflow as tf
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras import regularizers

num_train = 1000

X_train = np.random.rand(num_train, 2)
y_train_add = X_train[:, 0] + X_train[:, 1]

model_add = Sequential(
        [
            Dense(10),
            Dense(1)
            ]
        )

batch_size = 32
epochs = 100

model_add.compile(loss = 'mse', optimizer='adam')
model_add.fit(X_train, y_train_add, batch_size=batch_size, epochs=epochs, verbose = 1)

a = np.random.random((2000000,1))*100-50
b = np.random.random((100000,1))*10
x_train = np.append(a, b)
# 之前在0附近精度极差导致除法出错,所以增加了0附近的训练数据
y_train = np.square(x_train)

model_sqr = Sequential(
        [
            Dense(8, activation = 'elu', kernel_regularizer = regularizers.l2(0.001), input_shape = (1,)),
            Dense(8, activation = 'elu', kernel_regularizer = regularizers.l2(0.001)),
            Dense(1)
            ]

        )

batch_size = 32
epochs = 100

model_sqr.compile(loss = 'mse', optimizer='adam')
model_sqr.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose = 1)

x = "n" 
while True:
    print("enter first num:")
    x = input()
    if x == "end":
        break

    print("Enter operation:")
    op= input()

    print("enter second num:")
    y = input()

    X = int(x)
    Y = int(y)
    Ydiv = np.reciprocal(Y)

    if op == "*":
        predicted_product = model_sqr.predict(model_add.predict(np.array([[X, Y]]))) - model_sqr.predict(np.array([X])) -  model_sqr.predict(np.array([Y]))
        print(predicted_product/2)
    elif op =="/":
        predicted_quot = model_sqr.predict(model_add.predict(np.array([[X, Ydiv]]))) - model_sqr.predict(np.array([X])) -  model_sqr.predict(np.array([Ydiv]))
        print(predicted_quot/2)

问题现象

保存权重后运行程序,每组输入的输出值约为-0.123。

为排查原因,我测试了25/5,并修改程序打印(25+(1/5))²、25²和(1/5)²的预测值,得到623.7364、623.73645和0.24594116。

同时我绘制了平方函数(橙色)与平方神经网络模型(蓝色)的对比图:

平方函数与模型预测整体对比

放大至25附近:
25附近的平方函数与模型预测对比

放大至0附近:
0附近的平方函数与模型预测对比

发现绘图中看到的预测中间值与打印值不符:比如绘图中25²的预测值约为624,(25+(1/5))²约为634,(1/5)²约为0.42,这些值能得到可接受的结果,但打印值却不同。

两个问题

(1) 为何这些值存在差异?
(2) 如何让模型输出绘图中符合预期的预测值?

内容的提问来源于stack exchange,提问作者harry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:14:55