fashion_mnist資料集的大小同手寫數字
並且也是10分類問題,大小一樣為28 * 28的單通道
此程式採用5層網路結構,adam優化器,cross entry為loss進行train
需要注意的細節
對資料的預處理及型別轉換, train data需要shuffle和batch, test data需要分batch
train時,迭代的是dataset型別的原生db
model.summary() # 列印網路資訊 並且在這之前必須build輸入,如: model.build([none, 28 * 28])
sequential 接收layers時接收乙個列表
losses.mse => [b] 需要mean成標量才能運算梯度
cross_entryopy注意from_logits設定為true,並且第二個引數為logits
test data的y不用作one_hot
argmax返回的時int64而 prob需要為int32 [b, 10] 並且argmax時,注意此處是在第二個維度求最大值 axis=1
reduce_sum求出來的時scalar,需要轉為int才能加到corr_num上
# shape返回的為**列表**[b, ..]
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets, layers, optimizers, sequential, metrics
import os
os.environ[
'tf_cpp_min_log_level']=
'2'def
preprocess
(x, y)
: x = tf.cast(x, dtype=tf.float32)
/255
. y = tf.cast(y, dtype=tf.int32)
return x, y
(x, y)
,(x_test, y_test)
= datasets.fashion_mnist.load_data(
)print
(x.shape, y.shape)
batch_size =
128# [[x1, y1], [x2, y2]....]
db = tf.data.dataset.from_tensor_slices(
(x, y)
)db_test = tf.data.dataset.from_tensor_slices(
(x_test, y_test)
)db = db.
map(preprocess)
.shuffle(
10000
).batch(batch_size)
db_test = db_test.
map(preprocess)
.batch(batch_size)
# train時,迭代的是原生db
db_iter =
iter
(db)
print
(next
(db_iter)[0
].shape)
# squ 接收乙個列表
model = sequential(
[ layers.dense(
256, activation=tf.nn.relu)
,# [b, 784]@[784, 256] + [256] => [b, 256]
layers.dense(
128, activation=tf.nn.relu)
,# [b, 256]@[256, 128] + [128] => [b, 128]
layers.dense(
64, activation=tf.nn.relu)
,# [b, 128]@[128, 64] + [64] => [b, 64]
layers.dense(
32, activation=tf.nn.relu)
,# [b, 64]@[64, 32] + [32] => [b, 32]
layers.dense(10)
# logits [b, 32]@[32, 10] + [10]=> [b, 10]])
model.build(
[none,28
*28])
model.summary(
)# 列印網路資訊
optimizers = optimizers.adam(learning_rate=1e-
3)defmain()
:for epoch in
range(1
,20):
for step,
(x, y)
inenumerate
(db)
:# [b, 28, 28] => [b, 784]
x = tf.reshape(x,[-
1,28*
28])with tf.gradienttape(
)as tape:
logits = model(x)
y = tf.one_hot(y, depth=10)
prob = tf.nn.softmax(logits)
# mse => [b] 需要mean成標量才能運算
loss_mse = tf.reduce_mean(tf.losses.mse(y, prob)
)# cross_entryopy注意from_logits設定為true
loss_cros = tf.reduce_mean(tf.losses.categorical_crossentropy(y, logits, from_logits=
true))
# 求gradient
grads = tape.gradient(loss_cros, model.trainable_variables)
# 此處需要zip,zip後[(w1_grad, w1),(w2_grad, w2),(w3_grad, w3)..]
zip(grads, model.trainable_variables)
)if step %
100==0:
print
("epoch: %s, step: %s, loss: %s"
%(epoch, step, loss_cros.numpy())
)# test
# test集y不用作one_hot
corr_num =
0 total_num =
0for
(x, y)
in db_test:
# x:[b, 28, 28] => [b, 784]
x = tf.reshape(x,[-
1,28*
28]) logits = model(x)
prob = tf.nn.softmax(logits)
# prob:int64 [b, 10]
# 注意此處是在第二個維度求最大值
prob = tf.argmax(prob, axis=1)
prob = tf.cast(prob, dtype=tf.int32)
res = tf.cast(tf.equal(y, prob)
, dtype=tf.int32)
# reduce_sum求出來的時scalar
corr_num +=
int(tf.reduce_sum(res)
)# shape返回的時列表[b, ..]
total_num += x.shape[0]
acc = corr_num / total_num
print
("test acc = "
, acc)
if __name__ ==
'__main__'
: main(
)
西瓜資料集3 0 西瓜資料集
編號,色澤,根蒂,敲聲,紋理,臍部,觸感,好瓜 1,青綠,蜷縮,濁響,清晰,凹陷,硬滑,是 2,烏黑,蜷縮,沉悶,清晰,凹陷,硬滑,是 3,烏黑,蜷縮,濁響,清晰,凹陷,硬滑,是 4,青綠,蜷縮,沉悶,清晰,凹陷,硬滑,是 5,淺白,蜷縮,濁響,清晰,凹陷,硬滑,是 6,青綠,稍蜷,濁響,清晰,稍凹...
資料集 Pascal voc2007資料集分析
作為標準資料集,voc 2007 是衡量影象分類識別能力的基準。faster rcnn,yolo v1,yolo v2都以此資料集為最為演示樣例,因此,有必要了解一下本資料集的組成架構。voc資料集共包含 訓練集 5011幅 測試集 4952幅 共計9963幅圖,共包含20個種類。aeroplane...
自己資料集轉化為coco資料集
1.將copy到對應資料夾 cd home aistudio cp r data hand143 panopticdb imgs data coco images 2.提取標籤資料 import json import os import cv2 dataset 根路徑,裡面包含images 資料夾...