Keras中具有神经网络的参数的近似简单函数

时间:2018-11-27 08:23:46

标签: keras neural-network

我需要创建一个神经网络,以给定其参数的方式近似一个函数。我给神经网络提供了四个参数(A,x0,phi,omega),我想获得作为输出的

  

一个sin(ωx + phi)+ x0

(我需要将此网络作为另一个网络的一部分) 但是,由于收敛性很差,因此我无法训练网络。为什么会这样?

我使用三层完全连接的网络。这是代码

    def get_batches(N_batches):
        A = tan( random.uniform(low=0.,high=2*pi,size=[N_batches,1]))
        x0 = random.randn(N_batches,1)*10
        omega = random.uniform(low=0.,high=10*pi, size=[N_batches,1])
        phi = random.uniform(low=0.,high=2*pi, size=[N_batches,1])  
        x = linspace(0,t_max, n_max)
        x = tile(x,N_batches).reshape(N_batches,n_max)
        return (A*sin(omega*x+phi) + x0, hstack([A,x0,phi,omega]) )

    N_batches = 80
    N_epochs = 50
    t_max = 5.0
    n_max = 100
    n_par = 4

    net_layers = []

    net_inp = Input(shape=(n_par,))
    net_layers.append(Dense(25, input_shape=(n_par,),  activation="relu"))
    net_layers.append(Dense(25,  activation="relu"))
    net_layers.append(Dense(25,  activation="relu"))
    net_layers.append(Dense(n_max, activation="linear"))

    net_l = net_inp
    for i in range(len(net_layers)):
        net_l = net_layers[i](net_l)
    net = Model(net_inp, net_l)
    net.compile(loss="mean_squared_error", optimizer="adam") 

    costs = zeros(N_epochs)
    for i in range(N_epochs):
        y_true, y_in = get_batches(N_batches)
        costs[i]=net.train_on_batch(y_in,y_true)

即使我训练更多,也没有比这个更好的结果 图片(测试样本的近似函数和实函数图):

plot1

成本函数的图很奇怪:

plot2

我犯了什么错误?谢谢!

0 个答案:

没有答案