# Softmax

Softmax用于多元分类，同logistic regression一样使用cross entropy作为损失函数，其原理不再赘述。

# tensorflow实现

import tensorflow as tf
import numpy as np

def convert_to_one_hot(Y, C):
Y = np.eye(C)[Y.reshape(-1)]
return Y

# traing data
x_data = [[1, 2, 1, 1], [2, 1, 3, 2], [3, 1, 3, 4], [4, 1, 5, 5], [1, 7, 5, 5],
[1, 2, 5, 6], [1, 6, 6, 6], [1, 7, 7, 7]]
y_data = [[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 1, 0], [0, 1, 0], [0, 1, 0], [1, 0, 0], [1, 0, 0]]

X = tf.placeholder("float", [None, 4])
Y = tf.placeholder("float", [None, 3])

# number of classes
n_class = 3

# define hyperparameter
W = tf.Variable(tf.random_normal([4, n_class]), name="weight")
b = tf.Variable(tf.random_normal([n_class]), name="bias")

# define hypothesis using the built_in softmax
# softmax = tf.exp(logits) / tf.reduce_mean(tf.exp(logits), dim)
hypothesis = tf.nn.softmax(tf.matmul(X, W) + b)

# cross entropy loss
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(hypothesis), axis=1))

# specify optimizer method

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

for step in range(2001):
_, cost_val = sess.run([optimizer, cost], feed_dict={X: x_data, Y: y_data})
if step % 200 == 0:
print(step, cost_val)

# test by making some prediction
a = sess.run(hypothesis, feed_dict={X: [[1, 11, 7, 9], [1, 3, 4, 3], [1, 1, 0, 1]]})
p = sess.run(tf.argmax(a, 1))

p_one_hot = convert_to_one_hot(p, n_class)

print()
print(a)
print()
print(p)
print()
print(p_one_hot)
0 5.5841656
200 0.4481054
400 0.36178762
600 0.28431925
800 0.23740968
1000 0.21427636
1200 0.19528978
1400 0.17937106
1600 0.16581444
1800 0.15412535
2000 0.1439426

[[2.0620492e-03 9.9792922e-01 8.6969685e-06]
[9.0453833e-01 8.4767073e-02 1.0694573e-02]
[5.9199765e-09 2.7693674e-04 9.9972302e-01]]

[1 0 2]

[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]

0 条评论

• ### tensorflow入门：Logistic Regression

g(z)=11+e−zg(z) = \frac{1}{1+e^{-z}}g(z)=1+e−z1​

• ### tensorflow入门：Neural Network for mnist

我们使用tensorflow实现类似于上图的简单深度网络，用于mnist数据集预测模型的实现。理论方面不再赘述。

• ### tensorflow入门：CNN for MNIST

使用tensorflow构建如上图所示的CNN用于对MNIST数据集进行softmax classification。

• ### TensorFlow基础入门

对于一个被研究的物体，它有多个属性(x1, x2, ... xn)和一个值y。线性回归假设y与(x1, x2, ... xn)有线性关系，也就是我们可以把y表示...

• ### 用 Tensorflow 建立 CNN

稍稍乱入的CNN，本文依然是学习周莫烦视频的笔记。 还有 google 在 udacity 上的 CNN 教程。 CNN(Convolutional Neura...

• ### MLP算法及其实现

Softmax回归可以算是多分类问题logistic回归，它和神经网络的最大区别是没有隐含层。理论上只要隐含节点足够多，即时只有一个隐含层的神经网络也可以拟合任...

• ### Tensorflow简单CNN实现详解

glob是python自己带的一个文件操作相关模块，用它可以查找符合自己目的的文件，就类似于Windows下的文件搜索，支持通配符操作，*,?,[]这三个通配符...