标签: cross-entropy

为什么 Keras/tensorflow 的 sigmoid 和交叉熵精度低?

我有以下简单的神经网络(只有 1 个神经元)来测试Keras的sigmoid激活和计算精度binary_crossentropy

model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

为了简化测试,我手动设置唯一权重为1,偏置为0,然后用2点训练集评估模型{(-a, 0), (a, 1)},即

y = numpy.array([0, 1])
for a in range(40):
    x = numpy.array([-a, a])
    keras_ce[a] = model.evaluate(x, y)[0] # cross-entropy computed by keras/tensorflow
    my_ce[a] = np.log(1+exp(-a)) # My own computation
Run Code Online (Sandbox Code Playgroud)

我的问题: 我发现由 Keras keras_ce/Tensorflow 计算的二元交叉熵 ( ) 达到了大约1.09e-7什么时候的下限a。16,如下图(蓝线)。随着“a”不断增长,它不会进一步减少。这是为什么?

在此处输入图片说明

该神经网络只有 1 个神经元,其权重设置为 1,偏差为 0。使用 2 点训练集{(-a, 0), (a, 1)}binary_crossentropy只需

-1/2 [ log(1 …

python classification keras tensorflow cross-entropy

7
推荐指数
2
解决办法
6273
查看次数

TensorFlow:我的logits是否采用正确的交叉熵函数格式?

好吧,所以我准备tf.nn.softmax_cross_entropy_with_logits()在Tensorflow中运行该功能.

我的理解是'logits'应该是一个概率张量,每一个都对应于一个像素的概率,它是图像的一部分,最终将成为"狗"或"卡车"或其他......有限的事情的数量.

这些logits将插入到这个交叉熵方程中: 来自维基百科的交叉熵公式

据我了解,logits插入等式的右侧.也就是说,它们是每个x(图像)的q.如果它们的概率从0到1 ......那对我来说是有意义的.但是当我运行我的代码并最终得到一些logits时,我没有得到概率.相反,我得到了正面和负面的浮动:

-0.07264724 -0.15262917  0.06612295 ..., -0.03235611  0.08587133 0.01897052 0.04655019 -0.20552202  0.08725972 ..., -0.02107313 -0.00567073 0.03241089 0.06872301 -0.20756687  0.01094618 ...,   etc
Run Code Online (Sandbox Code Playgroud)

所以我的问题是......是吗?我是否必须以某种方式计算所有的logits并将它们转换为从0到1的概率?

tensorflow cross-entropy

6
推荐指数
1
解决办法
1万
查看次数

Tensorflow - 损失从高开始并且不会减少

我开始用张量流编写神经元网络,我的每个示例项目中都有一个问题.

我的损失总是从50或更高的东西开始并且没有减少,或者如果它减少,它的确如此缓慢,以至于在我所有的时代之后我甚至没有接近可接受的损失率.

它已经尝试过的事情(并没有太大影响结果)

  • 测试过度拟合,但在下面的例子中,您可以看到我有15000个训练和15000个测试数据集以及900个神经元之类的东西
  • 测试了不同的优化器和优化器值
  • 尝试使用testdata作为trainingdata来增加traingdata
  • 尝试增加和减少批量大小

我根据https://youtu.be/vq2nnJ4g6N0的知识创建了网络

但是,让我们看看我的一个测试项目:

我有一个名单列表,并希望假设性别,所以我的原始数据如下所示:

names=["Maria","Paul","Emilia",...]

genders=["f","m","f",...]
Run Code Online (Sandbox Code Playgroud)

为了将它提供给网络,我将名称转换为charCodes数组(期望最大长度为30)并将性别转换为位数组

names=[[77.,97. ,114.,105.,97. ,0. ,0.,...]
       [80.,97. ,117.,108.,0.  ,0. ,0.,...]
       [69.,109.,105.,108.,105.,97.,0.,...]]

genders=[[1.,0.]
         [0.,1.]
         [1.,0.]]
Run Code Online (Sandbox Code Playgroud)

我为输出层建立了3个隐藏层[30,20],[20,10],[10,10]和[10,2]的网络.所有隐藏层都具有ReLU作为激活功能.输出层具有softmax.

# Input Layer
x = tf.placeholder(tf.float32, shape=[None, 30])
y_ = tf.placeholder(tf.float32, shape=[None, 2])

# Hidden Layers
# H1
W1 = tf.Variable(tf.truncated_normal([30, 20], stddev=0.1))
b1 = tf.Variable(tf.zeros([20]))
y1 = tf.nn.relu(tf.matmul(x, W1) + b1)

# H2
W2 = tf.Variable(tf.truncated_normal([20, 10], stddev=0.1))
b2 = tf.Variable(tf.zeros([10]))
y2 = tf.nn.relu(tf.matmul(y1, W2) + b2)

# …
Run Code Online (Sandbox Code Playgroud)

loss neural-network deep-learning tensorflow cross-entropy

6
推荐指数
1
解决办法
7000
查看次数

如何在Keras中进行逐点分类的交叉熵损失?

我有一个产生4D输出张量的网络,其中空间维度(〜像素)中每个位置的值将被解释为该位置的类概率.换句话说,输出是(num_batches, height, width, num_classes).我有相同大小的标签,其中真实类被编码为一热.我想categorical-crossentropy用这个计算损失.

问题#1:K.softmax函数需要2D张量(num_batches, num_classes)

问题2:我不确定每个位置的损失应该如何组合.reshape张量是否正确(num_batches * height * width, num_classes)然后再呼吁K.categorical_crossentropy?或者更确切地说,调用K.categorical_crossentropy(num_batches, num_classes)高度*宽度乘以平均结果?

machine-learning neural-network keras cross-entropy loss-function

6
推荐指数
2
解决办法
3566
查看次数

pytorch nn.CrossEntropyLoss()中的交叉熵损失

也许有人能够在这里帮助我.我正在尝试计算网络给定输出的交叉熵损失

print output
Variable containing:
1.00000e-02 *
-2.2739  2.9964 -7.8353  7.4667  4.6921  0.1391  0.6118  5.2227  6.2540     
-7.3584
[torch.FloatTensor of size 1x10]
Run Code Online (Sandbox Code Playgroud)

和所需的标签,形式

print lab
Variable containing:
x
[torch.FloatTensor of size 1]
Run Code Online (Sandbox Code Playgroud)

其中x是0到9之间的整数.根据pytorch文档(http://pytorch.org/docs/master/nn.html)

criterion = nn.CrossEntropyLoss()
loss = criterion(output, lab)
Run Code Online (Sandbox Code Playgroud)

这应该工作,但不幸的是我得到一个奇怪的错误

TypeError: FloatClassNLLCriterion_updateOutput received an invalid combination of arguments - got (int, torch.FloatTensor, !torch.FloatTensor!, torch.FloatTensor, bool, NoneType, torch.FloatTensor, int), but expected (int state, torch.FloatTensor input, torch.LongTensor target, torch.FloatTensor output, bool sizeAverage, [torch.FloatTensor weights or None], torch.FloatTensor total_weight, int ignore_index) …
Run Code Online (Sandbox Code Playgroud)

entropy loss torch cross-entropy pytorch

6
推荐指数
1
解决办法
9820
查看次数

为什么"softmax_cross_entropy_with_logits_v2"支持标签

我想知道为什么在Tensorflow 1.5.0及更高版本中,softmax_cross_entropy_with_logits_v2默认反向传播到标签和logits.您希望将哪些应用程序/场景支持标签?

machine-learning neural-network tensorflow cross-entropy

6
推荐指数
1
解决办法
1400
查看次数

Keras:加权二进制交叉熵实现

我是Keras(以及ML)的新手,并且正在尝试训练二进制分类器。我正在使用加权二进制交叉熵作为损失函数,但不确定如何测试实现是否正确。

这是加权二进制交叉熵的准确实现吗?我该如何测试呢?

def weighted_binary_crossentropy(self, y_true, y_pred):
    logloss = -(y_true * K.log(y_pred) * self.weights[0] + \
               (1 - y_true) * K.log(1 - y_pred) * self.weights[1])

    return K.mean(logloss, axis=-1)
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras cross-entropy loss-function

6
推荐指数
1
解决办法
1220
查看次数

如何根据 PyTorch 中的概率计算交叉熵?

默认情况下,PyTorchcross_entropy采用 logits(模型的原始输出)作为输入。我知道将(log(softmax(x))) 和(负对数似然损失)CrossEntropyLoss结合在一个类中。所以,我想我可以用如下方法从概率中获得交叉熵损失:LogSoftmaxNLLLossNLLLoss

真实标签:[1, 0, 1]
概率:[0.1, 0.9], [0.9, 0.1], [0.2, 0.8]

在此输入图像描述

其中,y_i,j表示真实值,即如果样本i属于类别,则为1 j,否则为 0。并表示属于 类 的p_i,j样本模型预测的概率。ij

如果我手工计算的话,结果是:

>>> -(math.log(0.9) + math.log(0.9) + math.log(0.8))
0.4338
Run Code Online (Sandbox Code Playgroud)

使用 PyTorch:

>>> labels = torch.tensor([1, 0, 1], dtype=torch.long)
>>> probs = torch.tensor([[0.1, 0.9], [0.9, 0.1], [0.2, 0.8]], dtype=torch.float)
>>> F.nll_loss(torch.log(probs), labels)
tensor(0.1446)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?为什么答案不同?

deep-learning cross-entropy pytorch loss-function

5
推荐指数
1
解决办法
4732
查看次数

torch.nn.CrossEntropyLoss 多个批次

我目前正在与torch.nn.CrossEntropyLoss. 据我所知,批量计算损失是很常见的。但是,是否有可能计算多个批次的损失?

更具体地说,假设我们给出了数据

import torch

features = torch.randn(no_of_batches, batch_size, feature_dim)
targets = torch.randint(low=0, high=10, size=(no_of_batches, batch_size))

loss_function = torch.nn.CrossEntropyLoss()
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以一行计算

loss = loss_function(features, targets) # raises RuntimeError: Expected target size [no_of_batches, feature_dim], got [no_of_batches, batch_size]
Run Code Online (Sandbox Code Playgroud)

先感谢您!

cross-entropy pytorch loss-function pytorch-dataloader

5
推荐指数
1
解决办法
4300
查看次数

RuntimeError: 0D 或 1D 目标张量预期,不支持多目标我正在训练深度学习模型,但我遇到了这个问题

*My Training Model*
def train(model,criterion,optimizer,iters):
    epoch = iters
    train_loss = []
    validaion_loss = []
    train_acc = []
    validation_acc = []
    states = ['Train','Valid']
    for epoch in range(epochs):
        print("epoch : {}/{}".format(epoch+1,epochs))
        for phase in states:
            if phase == 'Train':
                model.train() *training the data if phase is train*
                dataload = train_data_loader
            else:
                model.eval()
                dataload = valid_data_loader
        
            run_loss,run_acc = 0,0 *creating variables to calculate loss and acc*
            for data in dataload:
                inputs,labels = data
                inputs = inputs.to(device)
                labels = labels.to(device)
            
                labels = labels.byte() …
Run Code Online (Sandbox Code Playgroud)

python deep-learning conv-neural-network cross-entropy pytorch

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