从理论上讲,具有 m 个隐藏节点的单层神经网络可以通过梯度下降来训练,以适应训练误差为0的 n 个数据点,其中 m> = n 。
我有100个数据点(x,y),R中有 x ,R中有 y ,没有特定的模式,只是随机的。我正在使用具有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)
答案 0 :(得分:0)
您的损失函数是什么?您能显示您的代码以及每个训练时期损失的一些打印输出吗?您如何初始化那些隐藏节点的参数(您描述中的nnn / nnnn / nnnn也不意味着它们是不同的实验设置?)?