分类目录归档:深度学习

My Keras tricks.

记录了一些使用 keras 的技巧。

categorical_crossentropy vs sparse_categorical_crossentropy.

3. The Answer, In a Nutshell

  • If your targets are one-hot encoded, use categorical_crossentropy.
  • Examples of one-hot encodings:
  • [1,0,0]
  • [0,1,0]
  • [0,0,1]
  • But if your targets are integers, use sparse_categorical_crossentropy.
  • Examples of integer encodings (for the sake of completion):
    • 1, 2, 3

clip norm


https://wulc.me/2018/05/01/%E6%A2%AF%E5%BA%A6%E8%A3%81%E5%89%AA%E5%8F%8A%E5%85%B6%E4%BD%9C%E7%94%A8/
可以加速 RNN 训练

Multiple GPU

# https://keras.io/utils/#multi_gpu_model#

使用多GPU,注意使用 save 的时候,传参传 model (multi_gpu_model的model参数)

Encode Labels

可以把不同的字符[‘aa’, ‘bb’, ‘cc’, ‘aa’] 编码成 [0, 1, 2, 0]

1
2
3
4
5
6
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)

训练中存在的问题

训练性能低了别急着调参,首先看看数据预处理有没有问题,评价指标是不是写错了。再一个,batch norm 要勤快点加上。

相似的文章还有:https://svtter.cn/2018/02/01/keras%e5%9d%91/

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