因此,有一个通用近似定理,该定理说神经网络可以近似任何连续函数,只要它至少具有一个隐藏层并且在那里使用非线性激活。
因此,我的疑问是:"我如何使用我的输入是其他功能的神经网络近似函数?"
假设我要近似 y = x 1 ,我有 z_1 = 2x,z_2 = 3x 3 和 z_3 = 4x 1 , x 是时间变体。我希望我的模型学习是 z_1,z_2,z_3 和 y 之间的关系,因为我可能会写 * y = -6 * z_1-1-1 * z_2 4Z_3*(我希望我的网络学习这种关系(。
从时间 0到t 我具有所有功能的值,可以进行监督的学习,但是从(t 1( 中,我只有 z_1,z_2 和 z_3 ,因此,我将基于这些 zz_1,z_2,z_3(。
如何使用keras在python上实现它?我使用了以下代码,但没有得到任何体面的结果。
import numpy as np
import matplotlib.pyplot as plt
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
n = 10000
def z_1(x):
x_0 = []
for i in x:
x_0.append(2*i)
return x_0
def z_2(x):
x_0 = []
for i in x:
x_0.append(3*i + 3)
return x_0
def z_3(x):
x_0 = []
for i in x:
x_0.append(4* i + 1)
return x_0
def z_0(x):
x_0 = []
for i in x:
x_0.append(i + 1)
return x_0
model = Sequential()
model.add(Dense(500, activation='relu', input_dim=3))
model.add(Dense(500, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
np.random.seed(seed = 2000)
input = np.random.random(n) * 10
dataset = z_0(input)
input_1 = z_1(input)
input_2 = z_2(input)
input_3 = z_3(input)
x_train = np.array([input_1[0:int(0.8*n)], input_2[0:int(0.8*n)], input_3[0:int(0.8*n)]])
y_train = np.array([dataset[0:int(0.8*n)]])
x_train = x_train.reshape(int(0.8*n), 3)
y_train = y_train.reshape(int(0.8*n),1)
es = keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
model.fit(x_train, y_train, epochs=100, batch_size=128, callbacks = [es])
x_test = np.array([input_1[int(n-100):n], input_2[int(n-100):n], input_3[int(n-100):n]])
x_test = x_test.reshape(int(100), 3)
classes = model.predict(x_test, batch_size=128)
y_test = np.array([dataset[int(n-100):n]]).reshape(int(100),1)
plt.plot(y_test,c='b', label = 'test data')
plt.plot(classes,c='r', label = 'test result')
plt.legend()
plt.show()
您无法使用前馈神经网络执行此操作。您需要使用经常性的神经网络进行此操作。查找Keras中的LSTM或GRU细胞。
https://keras.io/layers/recurrent/