softmax的多分类

from : https://blog.csdn.net/wangyangzhizhou/article/details/75088106

 

关于多分类

我们常见的逻辑回归、SVM等常用于解决二分类问题,对于多分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM,只是需要多个二分类来组成多分类,但这里讨论另外一种方式来解决多分类——softmax。

关于softmax

softmax的函数为

P(i)=exp(θTix)∑Kk=1exp(θTkx)P(i)=exp(θiTx)∑k=1Kexp(θkTx)

可以看到它有多个值,所有值加起来刚好等于1,每个输出都映射到了0到1区间,可以看成是概率问题。

θTixθiTx为多个输入,训练其实就是为了逼近最佳的θTθT。

如何多分类

从下图看,神经网络中包含了输入层,然后通过两个特征层处理,最后通过softmax分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到y=0、y=1、y=2的概率值。

这里写图片描述

继续看下面的图,三个输入通过softmax后得到一个数组[0.05 , 0.10 , 0.85],这就是soft的功能。

这里写图片描述

计算过程直接看下图,其中zLiziL即为θTixθiTx,三个输入的值分别为3、1、-3,ezez的值为20、2.7、0.05,再分别除以累加和得到最终的概率值,0.88、0.12、0。

这里写图片描述

 

使用场景

在多分类场景中可以用softmax也可以用多个二分类器组合成多分类,比如多个逻辑分类器或SVM分类器等等。该使用softmax还是组合分类器,主要看分类的类别是否互斥,如果互斥则用softmax,如果不是互斥的则使用组合分类器。

 

import tensorflow as tf
import numpy as np
x = tf.placeholder("float", [None,917])
w = tf.Variable(tf.zeros([917,22]))
b = tf.Variable(tf.zeros([22]))
y = tf.nn.softmax(tf.matmul(x,w) + b)

y_ = tf.placeholder("float", [None,22])
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y))
#cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.05).minimize(cross_entropy)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

x_train_data = np.genfromtxt('train_data.x.data',delimiter=' ')
y_train_data = np.genfromtxt('train_data.y.data',delimiter=' ')
print("load x_train_data shape=",x_train_data.shape)
print("load y_train_data shape=",y_train_data.shape)
x_test_data = np.genfromtxt('train_data.x.data.test',delimiter=' ')
y_test_data = np.genfromtxt('train_data.y.data.test',delimiter=' ')
print("load x_test_data shape=",x_test_data.shape)
print("load y_test_data shape=",y_test_data.shape)

for i in range(10000):
    sess.run(train_step, feed_dict={x: x_train_data, y_: y_train_data})
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print("iter i=",i," accuracy=",accuracy.eval(session=sess, feed_dict={x: x_test_data, y_: y_test_data}))

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Softmax函数是一种常用且重要的函数,尤其在器学习和深度学习中的多分类场景中使用广泛。它可以将多分类的结果以概率的形式展现出来,并且保证这些概率之和为1。 在多分类任务中,softmax函数可以用来求解各类别的概率分布。例如,在手写数字图片识别任务中,我们可以通过softmax函数得到每个数字的概率分布,这些概率之和为1。通过对输入进行映射,softmax函数将输入映射为0到1之间的实数,并保证各个类别的概率之和为1。这样,我们可以根据这些概率分布来判断输入属于哪个类别。 总结来说,softmax函数在多分类中起到了对输入进行归一化的作用,将输入映射为概率分布,并且使得这些概率之和为1。这样我们可以通过这些概率分布来进行多分类任务的预测。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Pytorch深度学习(六):Softmax函数实现多分类](https://blog.csdn.net/qq_40806950/article/details/126453269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [softmax多分类.rar](https://download.csdn.net/download/qq_27047075/12261311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值