机器学习随记(3)— Softmax

Softmax

与sigmoid不同,softmax可以多个输出,每个输出以概率的形式表示。

或者

 

 

def my_softmax(z):
    ez = np.exp(z)            
    sm = ez/np.sum(ez)
    return(sm)

 1 损失函数Loss

Softmax 相关的损失函数,即交叉熵损失:

 

 2 成本函数Cost

 

 𝑚是例子的数量,𝑁是输出的数量。这是所有损失的平均值。

 

3 Tensorflow实现

model = Sequential(
    [ 
        Dense(25, activation = 'relu'),
        Dense(15, activation = 'relu'),
        Dense(4, activation = 'softmax') 
    ]
)
model.compile(
    loss=tf.keras.losses.SparseCategoricalCrossentropy(), # 损失函数设置
    optimizer=tf.keras.optimizers.Adam(0.001),
)

model.fit(
    X_train,y_train,
    epochs=10
)

Preferred

 训练过程中将 softmax 和 loss 结合起来,可以获得更稳定和准确的结果。

(简单说就是将softmax整合进loss计算中,并在神经网络最后一层的softmax层变成线性激活层)

preferred_model = Sequential(
    [ 
        Dense(25, activation = 'relu'),
        Dense(15, activation = 'relu'),
        Dense(4, activation = 'linear')   # 注意 线性
    ]
)
preferred_model.compile(
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),  # 注意!
    optimizer=tf.keras.optimizers.Adam(0.001),
)

preferred_model.fit(
    X_train,y_train,
    epochs=10
)

 输出示例:

注意:输出预测不是概率!如果所需的输出是概率,则输出应由 softmax处理!

使用softmax处理成概率: tf.nn.softmax(p_preferred).numpy()

SparseCategorialCrossentropy 和 CategoricalCrossEntropy

Tensorflow 有两种可能的目标值格式,损失的选择定义了预期的格式。

  • SparseCategorialCrossentropy:期望目标是与索引对应的整数。例如,如果有 10 个潜在目标值,则 y 将介于 0 和 9 之间。
  • CategoricalCrossEntropy:期望示例的目标值是单热编码的,其中目标索引处的值为 1,而其他 N-1 个条目为零。一个具有 10 个潜在目标值的示例,其中目标值为 2 将是 [0,0,1,0,0,0,0,0,0,0]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值