Neural network 当使用随机输入的单隐层神经网络时,如何实现零训练误差?
理论上,一个具有m隐藏节点的隐层神经网络可以通过梯度下降进行训练,以拟合n数据点,且训练误差为0,其中m>=n 我有100个数据点(x,y),x在R和y在R,没有特定的模式,只是随机的。我用的是一个隐层神经网络,有1000/2000/10000/。。。隐藏节点以适应这些点(使用随机梯度下降和ReLU) 但我不能做到这一点。知道这里有什么问题吗Neural network 当使用随机输入的单隐层神经网络时,如何实现零训练误差?,neural-network,interpolation,Neural Network,Interpolation,理论上,一个具有m隐藏节点的隐层神经网络可以通过梯度下降进行训练,以拟合n数据点,且训练误差为0,其中m>=n 我有100个数据点(x,y),x在R和y在R,没有特定的模式,只是随机的。我用的是一个隐层神经网络,有1000/2000/10000/。。。隐藏节点以适应这些点(使用随机梯度下降和ReLU) 但我不能做到这一点。知道这里有什么问题吗 import numpy as np from keras.models import Sequential from keras.layers impo
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
from keras.optimizers import SGD
from keras import initializers
## initializing x_train and y_train randomly ##
def f1(x):
if x < 3:
return np.abs(x-1)
else:
return -np.abs(x-1)+4
n = 100
x_train = np.random.uniform(-4+1, 4+1, size = n)
e = np.random.normal(0, 0.5, size = n)
y_train = np.vectorize(f1)(x_train) + e
np.random.shuffle(y_train)
k = 10000 # number of hidden nodes
ep = 5
loss = []
model = Sequential()
model.add(Dense(k, kernel_initializer = 'random_normal', input_shape = (1,), use_bias=True))
model.add(Activation('relu'))
model.add(Dense(1, kernel_initializer = 'random_normal', use_bias=True))
#sgd = SGD(lr=0.00005, decay=1e-6, momentum=0.9)
sgd = SGD(lr=0.00008)
model.compile(loss='mse', optimizer=sgd, metrics = ['mse'])
for i in range(5000):
H = model.fit(x_train, y_train, epochs=ep, verbose=False)
wt = model.get_weights()
temp = H.history['mean_squared_error'][-1]
print(temp)
loss.append(temp)
将numpy导入为np
从keras.models导入顺序
从keras.layers导入稠密
从keras.layers导入激活
从keras.optimizers导入新加坡元
从keras导入初始值设定项
##随机初始化x_列和y_列##
def f1(x):
如果x<3:
返回np.abs(x-1)
其他:
返回-np.abs(x-1)+4
n=100
x_序列=np.随机.均匀(-4+1,4+1,大小=n)
e=np.随机.正常(0,0.5,大小=n)
y_列=np.矢量化(f1)(x_列)+e
np.random.shuffle(y_列)
k=10000#隐藏节点数
ep=5
损失=[]
模型=顺序()
add(稠密(k,内核初始化器='random\u normal',输入\u shape=(1,),使用\u bias=True))
添加(激活('relu'))
add(稠密(1,内核初始化器='random\u normal',use\u bias=True))
#sgd=sgd(lr=0.00005,衰变=1e-6,动量=0.9)
新加坡元=新加坡元(lr=0.00008)
compile(loss='mse',optimizer=sgd,metrics=['mse'])
对于范围(5000)内的i:
H=模型拟合(x_序列、y_序列、epochs=ep、verbose=False)
wt=模型。获取_权重()
temp=H.历史记录['mean_squared_error'][-1]
打印(临时)
丢失。追加(临时)
你的损失函数是什么?你能展示一下你的代码,也许还有一些打印出来的每个训练时期的损失吗?您如何初始化这些隐藏节点的参数(您描述中的nnn/nnnn/nnnn是否意味着这些是不同的实验设置?您的损失函数是什么?你能展示一下你的代码,也许还有一些打印出来的每个训练时期的损失吗?您如何初始化这些隐藏节点的参数(您描述中的nnn/nnnn/nnnn是否意味着这些是不同的实验设置?如果没有您的代码,将无能为力谢谢您的回复。刚刚发布了代码。没有你的代码我无能为力。谢谢回复。刚刚发布了代码。我使用了均方误差损失函数和随机正常初始化。是的,它们是不同的设置。很抱歉信息不足!我使用了均方误差损失函数和随机正态初始化。是的,它们是不同的设置。很抱歉信息不足!