iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

30天初探tensorflow之旅系列 第 13

Day 13 實作Softmax模型

  • 分享至 

  • xImage
  •  

什麼Softmax?
Softmax 是一種常用於多類別分類問題的激活函數,基本上會在神經網路的最後一層,將一組實數轉換為概率分佈。它的特點是將輸入的數值轉換為範圍在 0 和 1 之間的數字,並且這些數字的總和為 1。
對於一組實數 z = [z₁,z₂,...,zₙ],Softmax 函數定義如下:
https://ithelp.ithome.com.tw/upload/images/20240927/20169330kb9CQuECra.png

手寫辨識實作,將其中一張影像的像素以矩陣的方式呈現,可以看到那些數值呈現的形狀即是手寫數字的形狀,便能利用這些數值來預測手寫數字。可以用 NumPy 來處理圖像數據:

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import mnist

先加載 MNIST 資料集

(x_train, y_train), (x_test, y_test) = mnist.load_data()

選擇圖像,並以矩陣方式呈現

index = 3
image = x_train[index]
matrix = np.array(image)

輸出圖像及其矩陣

plt.imshow(image, cmap='gray')
plt.title(f'Label: {y_train[index]}')
plt.axis('off')
plt.show()
print("array:")
print(matrix)

接著定義類神經網路模型,MNIST 的影像是 28×28=784,定義輸入層 x 為 784 個節點, 0~9 有 10 個類別,則定義輸出層 y為 10 個節點。Softmax 回歸是單層的類神經網路模型,只要定義 W 跟 b,以及類神經網路運算的流程 y。

保留空位,要求預先保留數值:

x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])

給予 tf.Variable 初始值的方式來建立 Variable

W = tf.Variable(tf.zeros([784, 10])
b = tf.Variable(tf.zeros([10]))

要讓損失函數的數值最小化,TensorFlow 提供了結合 Softmax 與 Cross Entropy 的函式, .softmax_cross_entropy_with_logits 能給更穩定的數值。

loss = tf.reduce_mean(
  tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))

實現模型:

y = tf.nn.softmax(tf.matmul(x, W) + b)

上一篇
Day 12 熟悉 MNIST 手寫數字辨識資料集
下一篇
Day 14 Softmax 模型的訓練和評估
系列文
30天初探tensorflow之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言