标签: loss-function

了解交叉熵损失

我看到很多关于 CEL 或二元交叉熵损失的解释,其中基本事实是 0 或 1,然后你会得到一个如下函数:

def CrossEntropy(yHat, y):
    if yHat == 1:
      return -log(y)
    else:
      return -log(1 - y)
Run Code Online (Sandbox Code Playgroud)

然而,当你的 yHat 不是离散的 0 或 1 时,我对 BCE 如何工作感到困惑。例如,如果我想查看 MNIST 数字的重建损失,其中我的基本事实是 0 < yHat < 1,并且我的预测是也在同一范围内,这如何改变我的功能?

编辑:

抱歉,让我为我的困惑提供更多背景信息。在关于 VAE 的 PyTorch 教程中,他们使用 BCE 来计算重建损失,其中 yhat (据我所知,不是离散的)。看:

https://github.com/pytorch/examples/blob/master/vae/main.py

该实现有效......但我不明白在这种情况下如何计算 BCE 损失。

python machine-learning neural-network loss-function

4
推荐指数
1
解决办法
4924
查看次数

稀疏_分类_交叉熵的标签平滑

根据 Tensorflow 文档,可以通过添加 label_smoothing 参数来向 categorical_crossentropy 添加标签平滑。我的问题是稀疏分类交叉熵损失怎么样。此损失函数没有 label_smoothing 参数。

keras tensorflow loss-function

4
推荐指数
1
解决办法
3168
查看次数

AttributeError:“Tensor”对象在自定义损失函数中没有属性“numpy”(Tensorflow 2.1.0)

我想使用自定义损失函数训练模型,为此,我需要在以下方法中将张量转换为 numpy 数组:

def median_loss_estimation(y_true, y_predicted):
    a = y_predicted.numpy()
Run Code Online (Sandbox Code Playgroud)

但我有这个错误:

AttributeError: 'Tensor' object has no attribute 'numpy'
Run Code Online (Sandbox Code Playgroud)

为什么?如何将张量转换为 numpy 数组?

python numpy loss tensorflow loss-function

4
推荐指数
1
解决办法
1800
查看次数

categorical_crossentropy keras实现

我正在尝试应用蒸馏的概念,基本上是为了训练一个新的小型网络与原始网络一样,但计算量较少.

我有每个样本的softmax输出而不是logits.

我的问题是,如何实现分类交叉熵损失函数?就像它采用原始标签的最大值并将其与相同索引中的相应预测值相乘,或者它在整个logits(One Hot encoding)中的总和如公式所示: 在此输入图像描述

谢谢!!

python keras tensorflow softmax loss-function

3
推荐指数
2
解决办法
8763
查看次数

使用Keras的Tensorflow中的定制损失

操作系统平台和发行版:Linux Ubuntu16.04;TensorFlow版本:'1.4.0'

我可以使用以下代码正常运行:

import tensorflow as tf
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.backend import categorical_crossentropy
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.layers import  Input

mnist_data = input_data.read_data_sets('MNIST_data', one_hot=True)
img_size_flat = 28*28
batch_size = 64

def gen(batch_size=32):
    while True:
        batch_data, batch_label = mnist_data.train.next_batch(batch_size)
        yield batch_data, batch_label   


inputs = Input(shape=(img_size_flat,))
x = Dense(128, activation='relu')(inputs)  # fully-connected layer with 128 units and ReLU activation
x = Dense(128, activation='relu')(x)
preds = Dense(10, activation='softmax')(x)  # output layer with 10 units and a …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow loss-function

3
推荐指数
1
解决办法
1593
查看次数

在 Python 中实现梯度下降并收到溢出错误

梯度下降和溢出错误

我目前正在 python 中实现向量化梯度下降。但是,我仍然收到溢出错误。不过,我的数据集中的数字并不是很大。我正在使用这个公式:

矢量化梯度下降的公式 我选择此实现是为了避免使用衍生工具。有人对如何解决这个问题有任何建议还是我实施错误?先感谢您!

数据集链接:https://www.kaggle.com/CooperUnion/anime-recommendations-database/data

## Cleaning Data ##
import math
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = pd.read_csv('anime.csv')
# print(data.corr())
# print(data['members'].isnull().values.any()) # Prints False
# print(data['rating'].isnull().values.any()) # Prints True

members = [] # Corresponding fan club size for row 
ratings = [] # Corresponding rating for row

for row in data.iterrows():
    if not math.isnan(row[1]['rating']): # Checks for Null ratings
        members.append(row[1]['members'])
        ratings.append(row[1]['rating'])


plt.plot(members, ratings)
plt.savefig('scatterplot.png')

theta0 = 0.3 # Random …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence machine-learning gradient-descent loss-function

3
推荐指数
1
解决办法
3983
查看次数

Keras模型评估中的损失

我正在用Keras进行二进制分类 loss='binary_crossentropy'optimizer=tf.keras.optimizers.Adam最后一层是keras.layers.Dense(1, activation=tf.nn.sigmoid)

据我所知,loss价值是在训练阶段用来评估模型的。但是,当我Keras测试数据集使用模型评估时(例如m_recall.evaluate(testData,testLabel),也有一些loss值,并附带accuracy以下输出所示的值)

test size:  (1889, 18525)
1889/1889 [==============================] - 1s 345us/step
m_acc:  [0.5690245978371045, 0.9523557437797776]
1889/1889 [==============================] - 1s 352us/step
m_recall:  [0.24519687695911097, 0.9359449444150344]
1889/1889 [==============================] - 1s 350us/step
m_f1:  [0.502442331737344, 0.9216516675489677]
1889/1889 [==============================] - 1s 360us/step
metric name:  ['loss', 'acc']
Run Code Online (Sandbox Code Playgroud)

loss测试期间的意义/用途是什么?为什么它是如此之高(如0.5690m_acc)?准确度评估对我来说似乎不错(例如,0.9523在中m_acc),但我也很担心loss,这是否会使我的模型表现不佳?

PS m_accm_recall等等都只是我的名字我的模型的方法(它们是由不同的指标受训GridSearchCV

更新: 我只是意识到loss …

machine-learning keras loss-function

3
推荐指数
1
解决办法
1841
查看次数

如何将 L1 正则化添加到 PyTorch NN 模型?

在寻找在 PyTorch 模型中实现 L1 正则化的方法时,我遇到了这个问题,现在已经有 2 年历史了,所以我想知道这个主题是否有任何新内容?

我还发现了这种处理缺少的 l1 函数的最新方法。但是我不明白如何将它用于基本的神经网络,如下所示。

class FFNNModel(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim, dropout_rate):
        super(FFNNModel, self).__init__()
        self.input_dim = input_dim
        self.output_dim = output_dim
        self.hidden_dim = hidden_dim
        self.dropout_rate = dropout_rate
        self.drop_layer = nn.Dropout(p=self.dropout_rate)
        self.fully = nn.ModuleList()
        current_dim = input_dim
        for h_dim in hidden_dim:
            self.fully.append(nn.Linear(current_dim, h_dim))
            current_dim = h_dim
        self.fully.append(nn.Linear(current_dim, output_dim))

    def forward(self, x):
        for layer in self.fully[:-1]:
            x = self.drop_layer(F.relu(layer(x)))
        x = F.softmax(self.fully[-1](x), dim=0)
        return x
Run Code Online (Sandbox Code Playgroud)

我希望在训练前简单地把它放在一边:

model = FFNNModel(30,5,[100,200,300,100],0.2)
regularizer = …
Run Code Online (Sandbox Code Playgroud)

python neural-network pytorch loss-function

3
推荐指数
1
解决办法
3086
查看次数

当我在 tensorflow.keras 中使用 BinaryCrossentropy(from_logits=True) 时,我应该使用什么作为目标向量

我有一个多标签分类,其中每个目标都是一个互斥的 1 和 0 向量(为了清楚起见,我的目标类似于[0, 1, 0, 0, 1, 1, ... ])。

到目前为止我的理解是:

  • 我应该使用二元交叉熵函数。(如本答案所述

  • 另外,我知道这tf.keras.losses.BinaryCrossentropy()是围绕 tensorflow 的sigmoid_cross_entropy_with_logits. 这可以与from_logits True或一起使用False。(如本问题所述

  • 由于sigmoid_cross_entropy_with_logits自己执行 sigmoid,它期望输入在 [-inf,+inf] 范围内。

  • tf.keras.losses.BinaryCrossentropy(),当网络实现自己最后一层的 sigmoid 激活时,必须与 一起使用from_logits=False。然后它将推断 sigmoid 函数并将输出传递给sigmoid_cross_entropy_with_logits将再次执行 sigmoid的输出。然而,由于 sigmoid/logit 函数的渐近线,这可能会导致数值问题。

  • 为了提高数值稳定性,我们可以避免最后一个 sigmoid 层并使用 tf.keras.losses.BinaryCrossentropy(from_logits=False)

题:

如果我们使用tf.keras.losses.BinaryCrossentropy(from_logits=False),我应该使用什么目标?我是否需要更改 one-hot 向量的目标?

我想我应该在推理时将 sigmoid 激活应用于网络输出。有没有办法添加仅在推理模式下而不是在训练模式下活动的 sigmoid 层?

python machine-learning keras tensorflow loss-function

3
推荐指数
1
解决办法
3045
查看次数

Tensorflow InvalidArgumentError:发现 2 个根错误。索引 [28,0] = 11292 不在 [0, 11272)

我已经使用Keras Sequential API 创建了一个模型,并使用Glove 预训练嵌入

def create_model(
        input_length=20,
        output_length=20):

    encoder_input = tf.keras.Input(shape=(input_length,))
    decoder_input = tf.keras.Input(shape=(output_length,))

    encoder = tf.keras.layers.Embedding(original_embedding_matrix.shape[0], original_embedding_dim, weights=[original_embedding_matrix], mask_zero=True)(encoder_input)
    encoder, h_encoder, u_encoder = tf.keras.layers.LSTM(64, return_state=True)(encoder)

    decoder = tf.keras.layers.Embedding(clone_embedding_matrix.shape[0], clone_embedding_dim, weights=[clone_embedding_matrix], mask_zero=True)(decoder_input)
    decoder = tf.keras.layers.LSTM(64, return_sequences=True)(decoder, initial_state=[h_encoder, u_encoder])
    decoder = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(clone_vocab_size+1))(decoder)

    model = tf.keras.Model(inputs=[encoder_input, decoder_input], outputs=[decoder])
    model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError(), metrics=['accuracy'])

    return model

model = create_model()
Run Code Online (Sandbox Code Playgroud)

这是我的编码器/解码器形状:

training_encoder_input.shape --> (2500, 20) 
training_decoder_input.shape --> (2500, 20) 
training_decoder_output.shape ---> (2500, 20, 11272) 
clone_vocab_size ---> 11271
Run Code Online (Sandbox Code Playgroud)

的输出model.summary()

Model: "functional_1"
__________________________________________________________________________________________________ …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow loss-function

3
推荐指数
1
解决办法
1551
查看次数