softmax的多分類

2021-08-24 20:27:06 字數 2446 閱讀 9051

from : 

我們常見的邏輯回歸、svm等常用於解決二分類問題,對於多分類問題,比如識別手寫數字,它就需要10個分類,同樣也可以用邏輯回歸或svm,只是需要多個二分類來組成多分類,但這裡討論另外一種方式來解決多分類——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=)

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=))

softmax的多分類

我們常見的邏輯回歸 svm等常用於解決二分類問題,對於多分類問題,比如識別手寫數字,它就需要10個分類,同樣也可以用邏輯回歸或svm,只是需要多個二分類來組成多分類,但這裡討論另外一種方式來解決多分類 softmax。softmax的函式為 p i dfrac exp theta k tx 可以看到...

softmax多分類學習

softmax回歸從零開始實現 import torch import torchvision import numpy as np import sys import d2lzh pytorch as d2l 獲取資料 batch size 256 train iter,test iter d2l...

softMax交叉熵多分類引數調優之批次大小選擇

import tensorflow as tf import os import numpy as np import numpy as np os.environ tf cpp min log level 3 輸入隨機種子 myseed eval input learning rate eval ...