2017-09-02 93 views
0

我试图预测价格的特点。 我选择了一个非常简单的模型,但它很奇怪。损失函数非常高,我看不出问题在哪里。Keras极高的损失

这里是我的模型:

​​

这就是我准备的资料:(一热,我分裂的所有数据进行训练和测试)

df = encode_onehot(dataframe, cols=['Shape', 'Cut', 'Color', 'Clarity', 'Polish', 'Symmetry', 'Culet', '\tFluorescence']) 

dataset = df.values 
X = dataset[1:,4:66] 
Y = dataset[1:,2] 

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25, random_state=42) 

最后,培训:

baseline_model().fit(X_train, y_train, epochs=10, batch_size=64) 
scores = baseline_model().evaluate(X_test, y_test, verbose=0) 
print(baseline_model().summary()) 

而且结果非常伤心:

Epoch 1/10 
149767/149767 [==============================] - 4s - loss: 104759338.0333  
Epoch 2/10 
149767/149767 [==============================] - 4s - loss: 104594236.9627  
Epoch 3/10 
149767/149767 [==============================] - 4s - loss: 104556662.2948  

它并没有变好。

我在做什么错?

+0

你的输入和输出数据是什么样的? X热值是否被编码为不同的整数或矢量?是一个热点编码或不是?从 – gionni

+2

这个问题不清楚'y_train'的范围是什么?它是否包含大于10000的值?如果'y_train'包含一些较大的值,因为您使用的是平均值**平方**错误,所以看到高损失并不奇怪。除非你的模型非常强大或者你有很强的特征,'y_true - y_pred'的平方可以非常大。 –

+0

@gionni X一个热值编码为矢量。 Y不是热编码的(因为它只是'价格') –

回答

1

As @ Yu-Yang表示您使用均方误差作为损失函数。我有这个相同的问题之前,损失值将非常大,将损失函数更改为mean_squared_logarithmic_error,我得到了预期的结果。

model %>% compile(
optimizer = optimizer_rmsprop(lr=0.0001), 
loss = loss_mean_squared_logarithmic_error, 
metrics = c("accuracy") 
) 

损失值改变为

历元1/10
326981分之326981[====================== ========] - 17s - 损失:0.0048 - acc:0.9896

希望这有用!

+1

它适合我。谢谢 – Jibin