小编Luc*_*ucG的帖子

来自keras的Model.train_on_batch和来自tensorflow的Session.run([train_optimizer])有什么区别?

在以下Keras和Tensorflow实现的神经网络训练model.train_on_batch([x], [y])中,keras实现sess.run([train_optimizer, cross_entropy, accuracy_op], feed_dict=feed_dict)中的方法与Tensorflow实现中的不同?特别是:这两条线在训练中如何导致不同的计算?:

keras_version.py

input_x = Input(shape=input_shape, name="x")
c = Dense(num_classes, activation="softmax")(input_x)

model = Model([input_x], [c])
opt = Adam(lr)
model.compile(loss=['categorical_crossentropy'], optimizer=opt)

nb_batchs = int(len(x_train)/batch_size)

for epoch in range(epochs):
    loss = 0.0
    for batch in range(nb_batchs):
        x = x_train[batch*batch_size:(batch+1)*batch_size]
        y = y_train[batch*batch_size:(batch+1)*batch_size]

        loss_batch, acc_batch = model.train_on_batch([x], [y])

        loss += loss_batch
    print(epoch, loss / nb_batchs)
Run Code Online (Sandbox Code Playgroud)

tensorflow_version.py

input_x = Input(shape=input_shape, name="x")
c = Dense(num_classes)(input_x)

input_y = tf.placeholder(tf.float32, shape=[None, num_classes], name="label")
cross_entropy = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits_v2(labels=input_y, logits=c, name="xentropy"),
    name="xentropy_mean" …
Run Code Online (Sandbox Code Playgroud)

python machine-learning keras tensorflow

9
推荐指数
1
解决办法
942
查看次数

使用“K.constant”或“self.add_weight(trainable=False)”作为层中的固定权重有什么不同

我有一个使用固定权重矩阵的自定义 keras 层。我想知道如何使用 keras API 和张量流来处理这个固定权重矩阵。特别是,为什么我要使用K.constantwhenself.add_weights(trainable=False)提供更大的灵活性(例如,我可以Layer.set_weights与后者一起使用)。

具体来说,在构建方法中我可以这样做:

 class CustomLayer(Layer):
        ...

        def build(self, input_shape):
               self.fixed_tensor = K.constant(self.my_fixed_tensor)
               self.built = True
Run Code Online (Sandbox Code Playgroud)

或者

 class CustomLayer(Layer):
        ...

        def build(self, input_shape):
               self.fixed_tensor = self.add_weight(
                    shape=self.my_fixed_tensor.shape,
                    initializer=lambda shape, dtype: self.my_fixed_tensor,
                    trainable=False
               )
               self.built = True
Run Code Online (Sandbox Code Playgroud)

两种解决方案都有效,我想知道它们在后端的处理方式是否不同。

python keras tensorflow

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

pytorch 的交叉熵损失与 keras 的“categorical_crossentropy”不同吗?

我正在尝试在 keras 中模拟 pytorch 神经网络。

我确信我的 keras 版本的神经网络与 pytorch 中的非常接近,但在训练期间,我看到 pytorch 网络的损失值远低于 keras 网络的损失值。我想知道这是不是因为我没有正确复制keras中的pytorch网络或者两个框架中的损失计算不同。

Pytorch 损失定义:

loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=0.9, weight_decay=5e-4)
Run Code Online (Sandbox Code Playgroud)

Keras 损失定义:

sgd = optimizers.SGD(lr=.1, momentum=0.9, nesterov=True)
resnet.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['categorical_accuracy'])
Run Code Online (Sandbox Code Playgroud)

请注意,根据源代码,keras 网络中的所有层都已使用 L2 正则化实现kernel_regularizer=regularizers.l2(5e-4),我还使用了he_uniform我认为在 pytorch 中默认的初始化。

两个网络的批量大小相同:128.

在 pytorch 版本中,我得到了大约4.1209减少到大约 的损失值0.5。在 keras 中,它从 30 左右开始并减少到2.5.

neural-network deep-learning keras pytorch

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

类型提示 torch.float 用于特殊形式类型提示

我有一个函数可以采用多种typing.Union类型,包括 type torch.float。但如果我使用typing.Unionwithtorch.float作为参数,我会收到错误。这是一个例子:

from typing import Union
import torch

def fct(my_float_or_tensor: Union[torch.float, torch.Tensor]):
    pass
Run Code Online (Sandbox Code Playgroud)

我得到了错误

TypeError: Union[t0, t1, ...]: each t must be a type. Got torch.float32.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

有趣的是,特殊类型也会出现同样的问题,但如果我在类型提示时直接typing.Tuple使用,则不会出现同样的问题。torch.float

python-3.x pytorch python-typing

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

摆脱root conda环境

一旦我安装了miniconda,我就永远在root miniconda环境中,例如:

luc@montblanc:~$ conda info --envs
# conda environments:
#
bunnies                  /home/luc/miniconda3/envs/bunnies
expose                   /home/luc/miniconda3/envs/expose
testano                  /home/luc/miniconda3/envs/testano
testcondaenv             /home/luc/miniconda3/envs/testcondaenv
root                  *  /home/luc/miniconda3
Run Code Online (Sandbox Code Playgroud)

哪个结果使用了这个环境python3可执行文件:

luc@montblanc:~$ which python3
/home/luc/miniconda3/bin/python3
Run Code Online (Sandbox Code Playgroud)

如何在没有实际卸载python的情况下离开这个根环境.我想要

luc@montblanc:~$ which python3
/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

/home/luc/miniconda3/bin/python3在需要时明确地引用python的miniconda分布(使用完整路径).

我不想达到任何最终目标,我只是想了解发生了什么以及它是如何工作的.

python anaconda conda miniconda

1
推荐指数
2
解决办法
2291
查看次数