使用 grub customizer 调教grub

调整grub总是需要搜索某个文件,某个配置,相当麻烦,近期找了一个比较不错的图形化配置管理器,grub customizer,可以调整启动的内核,以及启动的画面,非常好用,安利一发。

安装

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

使用截图

【日后补上】

reference

  • http://ubuntuhandbook.org/index.php/2016/04/install-grub-customizer-ubuntu-16-04-lts/
  • grub讲解

vscode为django添加合适的pylint

使用vscode进行django开发的时候,总会出现一些错误,比如说对Django的一些结构进行错误的报错;

这个时候可以安装pylint-django这个插件。

安装方法:pip install pylint-django

使用:

.vscode/配置文件中增加:

    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django"
    ],

即可。

参考

https://stackoverflow.com/questions/45135263/class-has-no-objects-member

python如何使用不可变量const

# python2
# Put in const.py...:
class _const:
    class ConstError(TypeError): pass
    def __setattr__(self,name,value):
        if self.__dict__.has_key(name):
            raise self.ConstError, "Can't rebind const(%s)"%name
        self.__dict__[name]=value
import sys
sys.modules[__name__]=_const()
# that's all -- now any client-code can
import const
# and bind an attribute ONCE:
const.magic = 23
# but NOT re-bind it:
const.magic = 88      # raises const.ConstError
# you may also want to add the obvious __delattr__

# python3 version
class _const:
    class ConstError(TypeError):
        pass
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise self.ConstError("Can't rebind const(%s)" % name)
        self.__dict__[name] = value
import sys
sys.modules[__name__] = _const()

这样一来,就可以在python中使用不可变量了。其中,利用魔术方法__setattr__,把一个变量当作是const类的属性,然后使用__dict__来判断当前变量是否已经存在。

通过这个技巧我们还能构造出一系列有意思的东西——

运行截图

refer

  • https://gist.github.com/Svtter/c96e3259e264621e8bc1ab45b4c2675a
  • http://code.activestate.com/recipes/65207-constants-in-python/?in=user-97991

Keras坑

使用Keras做分类的时候踩了一个坑,也是拿来主义的锅,估计也有不少同志遇到。

在进行分类的时候,往往使用categorical_crossentropy,有时候萌新(像我)会用binary_crossentropy,虽然结果可能上浮30%,但是这个结果是不对的。model.fit以及model.evaluate给出的acc的值都是有问题的,正确的计算方法应该是:

# Actual accuracy calculated manually:
y_pred = model.predict(x_test)
acc = sum([np.argmax(y_test[i])==np.argmax(y_pred[i]) for i in range(10000)])/10000

其中

numpy.argmax(a, axis=None, out=None)
# 返回沿轴axis最大值的索引。

使用测试样本的数量代替10000,输出的acc才是正确的结果。

这个方法是使用二分类的时候才能使用的,label的个数多于2就不能使用。

参考

https://stackoverflow.com/questions/42081257/keras-binary-crossentropy-vs-categorical-crossentropy-performance