这是更严格的个人问题,但我希望有人会在这里帮助我。
我正在使用这个TF模型,它必须尽可能准确地预测一些连续的数字。我试图将结果与MAE精度低于6400,但我最接近的MAE预测为79000。
我有90个输入功能。 130000排训练数据。 10000行验证数据。
我的模特:
# Parameters
learning_rate = 0.001
training_epochs = 100
batch_size = 500
display_step = 1
# Network Parameters
n_input = X_train.shape[1]
n_hidden_1 = 180 # 1st layer number of features
n_hidden_2 = 180 # 2nd layer number of features
n_hidden_3 = 180 # 3rd layer number of features
n_hidden_4 = 180 # 4th layer number of features
n_hidden_5 = 180 # 6th layer number of features
n_hidden_6 = 180 # 7th layer number of features
n_hidden_7 = 180 # 8th layer number of features
n_out = 1
init = tf.truncated_normal_initializer(mean=0, stddev=0.1, seed=None)
weights = {
'h1': tf.nn.l2_normalize(tf.get_variable(name='h1', shape=[n_input, n_hidden_1], initializer=init), axis=[0]),
'h2': tf.nn.l2_normalize(tf.get_variable(name='h2', shape=[n_hidden_1, n_hidden_2], initializer=init), axis=[0]),
'h3': tf.nn.l2_normalize(tf.get_variable(name='h3', shape=[n_hidden_2, n_hidden_3], initializer=init), axis=[0]),
'h4': tf.nn.l2_normalize(tf.get_variable(name='h4', shape=[n_hidden_3, n_hidden_4], initializer=init), axis=[0]),
'h5': tf.nn.l2_normalize(tf.get_variable(name='h5', shape=[n_hidden_4, n_hidden_5], initializer=init), axis=[0]),
'h6': tf.nn.l2_normalize(tf.get_variable(name='h6', shape=[n_hidden_5, n_hidden_6], initializer=init), axis=[0]),
'h7': tf.nn.l2_normalize(tf.get_variable(name='h7', shape=[n_hidden_6, n_hidden_7], initializer=init), axis=[0]),
'wout': tf.nn.l2_normalize(tf.get_variable(name='wout', shape=[n_hidden_7, n_out], initializer=init), axis=[0])
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1], 0, 0.1, name='b1')),
'b2': tf.Variable(tf.random_normal([n_hidden_2], 0, 0.1, name='b2')),
'b3': tf.Variable(tf.random_normal([n_hidden_3], 0, 0.1, name='b3')),
'b4': tf.Variable(tf.random_normal([n_hidden_4], 0, 0.1, name='b4')),
'b5': tf.Variable(tf.random_normal([n_hidden_5], 0, 0.1, name='b5')),
'b6': tf.Variable(tf.random_normal([n_hidden_6], 0, 0.1, name='b6')),
'b7': tf.Variable(tf.random_normal([n_hidden_7], 0, 0.1, name='b7')),
'bout': tf.Variable(tf.random_normal([n_out], 0, 0.1, name='bout'))
}
# Construct model
pred = multilayer_perceptron(x, weights, biases)
我的费用函数:
cost = tf.reduce_mean(tf.abs(tf.transpose(pred) - y) / y)
我的优化器:
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
我也正在预处理我的测试和验证数据:
X_test_scale = preprocessing.scale(X_test)
我尝试了很多变化,更多层次的神经元,不同的优化,规范化,成本,学习率,时期,批量大小功能,但我不能得到更多:
MAE: 79900.500000
MRE: 0.129946
您对如何做得更好有任何建议吗?
谢谢!
答案 0 :(得分:0)
很难指出解决方案,但你没有提到的一件事是正规化。辍学或l2正规化可能有所帮助。另外,查看您的学习曲线并检查模型是否过度拟合。 例如,使用l2,您可以执行以下操作:
regularizer = tf.nn.l2_loss(weights)
cost = tf.reduce_mean(tf.abs(tf.transpose(pred) - y) / y + regularizer)
最重要的是,您似乎没有使用任何激活功能,因为您正在调用multilayer_perceptron
。我认为改进的最佳机会是在层之间包含非线性函数,例如ReLU。