【问题标题】:Errors in making predictions using keras使用 keras 进行预测时的错误
【发布时间】:2018-08-08 02:55:13
【问题描述】:

我正在尝试使用神经网络来近似对数正态分布 pdf(仅作为练习)。但是,model.predict() 总是返回 1。这是我的代码

import tensorflow as tf
import numpy as np
from scipy.stats import lognorm
from tensorflow import keras

mu = 5
sig =1
data = np.linspace(0,600,10000)
labels =lognorm.pdf(data,sig,0,np.exp(mu))

model = keras.Sequential()
model.add(keras.layers.Dense(64,input_shape=(1,),activation='sigmoid'))
model.add(keras.layers.Dense(64, activation='sigmoid'))
model.add(keras.layers.Dense(1, activation='softmax'))

model.compile(optimizer=tf.train.AdamOptimizer(0.001),
          loss='mse',
          metrics=['accuracy'])
model.fit(data, labels, epochs=1)

# Now test

x = np.random.lognormal(mu, sig, 100)
y =lognorm.pdf(x,sig,0,np.exp(mu))

score = model.evaluate(x, y)
# score = [0.9951245284080505, 0.0]

# Now try prediction

newx = np.linspace(600,1000,50)
newy = model.predict(newx)
score2 = model.evaluate(newx, newy)
# score2 = [0.0, 1.0]

score2 是 0,但它不应该是。有人能帮我找出我做错的地方吗?

【问题讨论】:

    标签: python tensorflow machine-learning keras prediction


    【解决方案1】:

    您的最后一层是 softmax,它尝试获取最高的输出字段并将其对齐到值 1,同时缩放其他所有内容。

    Softmax 主要用于分类问题,在这种情况下,您想清楚地声明一个潜在的输出是“正确的”。

    在这种情况下,您只有一个输出,它打算表示一个介于 0 和 1 之间的值,所以我可能会在最后一层使用另一个 sigmoid。

    【讨论】:

    • 谢谢!事实上,我不应该使用 softmax。我 (1) 将最后一层的激活更改为 activation='linear' (2) 将标签缩放 10^8 (原来它太小了),(3) 将指标更改为 metrics=['mse'] 然后模型工作!
    猜你喜欢
    • 2018-07-24
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多