Neural network 当使用随机输入的单隐层神经网络时,如何实现零训练误差?

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

理论上,一个具有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 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是否意味着这些是不同的实验设置?

如果没有您的代码,将无能为力谢谢您的回复。刚刚发布了代码。没有你的代码我无能为力。谢谢回复。刚刚发布了代码。我使用了均方误差损失函数和随机正常初始化。是的,它们是不同的设置。很抱歉信息不足!我使用了均方误差损失函数和随机正态初始化。是的,它们是不同的设置。很抱歉信息不足!