fashion mnist資料集實戰

2021-10-16 12:56:35 字數 4286 閱讀 5382

fashion_mnist資料集的大小同手寫數字

並且也是10分類問題,大小一樣為28 * 28的單通道

此程式採用5層網路結構,adam優化器,cross entry為loss進行train

需要注意的細節

對資料的預處理及型別轉換, train data需要shuffle和batch, test data需要分batchtrain時,迭代的是dataset型別的原生dbmodel.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 資料夾...