【问题标题】:Decimal accuracy of output layer in keraskeras中输出层的小数精度
【发布时间】:2017-07-03 17:09:41
【问题描述】:

我正在开展一个项目,该项目根据与其相关的各种输入特征来预测药物协同值。协同值是浮点数,所以我想为我的神经网络设置一个准确度范围。 例如 - 假设实际值为 1.342423,而我的模型预测为 1.30123,那么输出应该被视为正确的输出。 换句话说,我想限制检查以比较实际答案和预测答案的小数位数。 神经网络:

model = Sequential()
act = 'relu'
model.add(Dense(430, input_shape=(3,)))
model.add(Activation(act))

model.add(Dense(256))
model.add(Activation(act))
model.add(Dropout(0.42))

model.add(Dense(148))
model.add(Activation(act))
model.add(Dropout(0.3))

model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

用于学习和训练/测试数据的完整源代码: https://github.com/tanmay-edgelord/Drug-Synergy-Models/blob/master 请询问所需的任何其他详细信息 (使用 Keras 和 TensorFlow 后端)

【问题讨论】:

    标签: python-3.x tensorflow neural-network keras


    【解决方案1】:

    创建custom metric

    import keras.backend as K
    
    def myAccuracy(y_true, y_pred):
        diff = K.abs(y_true-y_pred) #absolute difference between correct and predicted values
        correct = K.less(diff,0.05) #tensor with 0 for false values and 1 for true values
        return K.mean(correct) #sum all 1's and divide by the total. 
    

    然后在模型编译中使用:

    model.compile(metrics=[myAccuracy],....)
    

    【讨论】:

    • 因为您想要一个介于 0 和 1 之间的值来表示准确性,对吧?所有这些计算都适用于“张量”(同时具有所有预测的矩阵)。 correct 变量是一个有很多 0 和很多 1 的张量。如果它们都是一,那么准确性就是其中之一。如果全部为 0,则准确率为 0。如果其中一半为 1,则准确率为 0.5。
    • 我还是不太明白。 y_true = 3.10142 和 y_pred = 3.01231 会返回什么
    • 模型同时处理大量数据,您将拥有y_true=[3.10, 2.50, 4.10]y_pred=[3.01,2.47,4.16] 之类的东西。结果将是[False,True,False] = 33% 的平均值。 -- 您可以将0.05 调整为更大的值。
    • 非常感谢您的解释
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2019-10-12
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多