神经网络实现除法输出固定值问题排查与解决求助
神经网络实现乘除运算的问题排查
我尝试用基于平方差公式的方法开发实现两数乘除的神经网络,乘法部分运行正常,但除法部分存在问题:每次运行程序时,每组输入都会得到一个近似固定的输出值。之前在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附近:
放大至0附近:
发现绘图中看到的预测中间值与打印值不符:比如绘图中25²的预测值约为624,(25+(1/5))²约为634,(1/5)²约为0.42,这些值能得到可接受的结果,但打印值却不同。
两个问题
(1) 为何这些值存在差异?
(2) 如何让模型输出绘图中符合预期的预测值?
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

