tensorflow2 手写数字识别
1、conda运行环境加载fashion-mnist数据集,存放在如下路径中,C:UsersAdministrator.keras 数据网盘下载链接: 链接:https://pan.baidu.com/s/1sCCOdscPRVwgbJSKShJl0A 提取码:4wpq
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets,layers,Sequential,metrics,optimizers
def data_press(x,y):
x=tf.cast(x,tf.float32)/255
y=tf.cast(y,tf.int32)
return x,y
(x,y),(x_test,y_test)=datasets.fashion_mnist.load_data()
traindata=tf.data.Dataset.from_tensor_slices((x,y))
traindata=traindata.map(data_press).shuffle(100000).batch(100)
testdata=tf.data.Dataset.from_tensor_slices((x_test,y_test))
testdata=testdata.map(data_press).batch(100)
# d=next(iter(traindata))
# print(d)
model=Sequential([
layers.Dense(256,activation=relu)
,layers.Dense(126,activation=relu)
,layers.Dense(64,activation=relu)
,layers.Dense(32,activation=relu)
,layers.Dense(10)
])
model.build(input_shape=[None,28*28])
model.summary()
optim=optimizers.Adam(lr=1e-3)
import datetime
current_time=datetime.datetime.now().strftime(("%Y%m%d-%H%M%S"))
log_dir=logs/+current_time
summary_writer=tf.summary.create_file_writer(log_dir)
count={cnt:0,test:0}
def train(epoch,count):
for step,(x,y) in enumerate(traindata):
with tf.GradientTape() as tape:
# print(x_trainshape,x.shape,y.shape)
x=tf.reshape(x,[-1,28*28])
y=tf.one_hot(y,depth=10)
y_pred=model(x)
mse_loss=tf.reduce_mean(tf.square(y,y_pred))
mse_loss2=tf.reduce_mean(tf.losses.MSE(y,y_pred))
mse_ce=tf.reduce_mean(keras.losses.categorical_crossentropy(y,y_pred,from_logits=True))
grads=tape.gradient(mse_ce,model.trainable_variables)
optim.apply_gradients(zip(grads,model.trainable_variables))
if step%100==0:
print(epoch,step,,float(mse_loss),float(mse_loss2),float(mse_ce))
with summary_writer.as_default():
tf.summary.scalar(train-loss,float(mse_ce),step=count[cnt])
count[cnt]+=1
#test
toteal_c=0
total_num=0
for step,(x,y) in enumerate(testdata):
# print(x.shape)
# print(y.shape,y.shape)
x=tf.reshape(x,[-1,28*28])
x=model(x)
pred=tf.argmax(x,axis=1)
pred=tf.cast(pred,dtype=tf.int32)
correct=tf.equal(pred,y)
correct=tf.reduce_sum(tf.cast(correct,tf.int32))
toteal_c+=int(correct)
total_num+=x.shape[0]
with summary_writer.as_default():
tf.summary.scalar(test-acc,float(toteal_c/total_num),step=count[test])
count[test]+=1
acc=toteal_c/total_num
print(acc)
if __name__==__main__:
for i in range(30):
train(i,count)
tensorboard 展示: 1、开启tensorboard --logdir logs 2、定义summary,
current_time=datetime.datetime.now().strftime(("%Y%m%d-%H%M%S"))
log_dir=logs/+current_time
summary_writer=tf.summary.create_file_writer(log_dir)
with summary_writer.as_default():
tf.summary.scalar(train-loss,float(mse_ce),step=count[cnt])
3、http://localhost:6006/ 展示
上一篇:
JS实现多线程数据分片下载
下一篇:
pytorch搭建Unet网络结构
