使用基于tensorflow keras完成fashion_mnist图片分类,并在tensorboard可视化

在获取时尚数据时遇到问题,连不上下载的网站导致图片无法加载,此时需要自己另外找网站下载压缩包并放入对应目录即可

C:\Users\RayLu\.keras\datasets\fashion-mnist

 def __init__(self):
        (self.x_train,self.y_train),(self.x_test,self.y_test) = keras.datasets.fashion_mnist.load_data()

全部码如下

import numpy
import tensorflow.compat.v1 as tf
import os
# from tensorflow.python.keras.processing.image import load_img, img_to_array
from tensorflow.python.keras.models import Sequential, Model
from tensorflow.python.keras.layers import Dense, Flatten, Input
from tensorflow.python.keras.losses import sparse_categorical_crossentropy
#使用此位置keras写代码时无提示,但可正常执行,本人使用python3.9.7,conda 4.10.3,tensorflow 2.0
from tensorflow import keras
#使用此位置keras写代码有提示,但无法执行,提示无法找到
# from tensorflow.python import keras

#去除警告
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
#版本不兼容,加入此行
tf.compat.v1.disable_eager_execution()

# def main():
#     # img = load_img("./part-00086-3880.jpg", target_size=(300,300))
#     # print(img)
#     # img_array = img_to_array(img)
#     # print(img_array)
#     # print(len(img_array),len(img_array[0]),len(img_array[0][0]))
#     (x_train, y_train),(x_test, y_test) = keras.datasets.cifar100.load_data()
#     print(x_train.shape)
#     print("y_tarin: ", y_train.shape)
#     print(x_train)
#
#     return None

#load数据集
#建立神经网络模型
class SingleNN(object):
    # 建立神经网络模型, 含两层网络,
    # 隐藏层1含128个神经元
    # 隐藏层2含10个神经元,对应10种类型输出,也是全连接层
    model = keras.Sequential([
        keras.layers.Flatten(input_shape=(28,28)),
        keras.layers.Dense(128, activation= tf.nn.relu),
        keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

    def __init__(self):
        (self.x_train,self.y_train),(self.x_test,self.y_test) = keras.datasets.fashion_mnist.load_data()
        #print(self.x_train[3])
        #进行数据归一化
        #像素值由原来的0~255 转化为 0~1
        self.x_train = self.x_train/255.0
        self.x_test = self.x_test/255.0
        # self.y_train = self.y_train/255.0
        # self.y_test = self.y_test/255.0

    def singleNN_compile(self):
        #编译模型优化器,损失,准确率
        #SGD梯度优化,精度设置lr
        # SingleNN.model.compile(optimizer=keras.optimizer.SGD(lr=0.01),
        #                        #交叉熵损失函数
        #                        loss=keras.losses.sparse_categorical_crossentropy(),
        #                        metrics='accuracy'
        #                        )
        SingleNN.model.compile(optimizer="sgd",
                               loss='sparse_categorical_crossentropy',
                               metrics=['accuracy'])

        return None

    #模型训练
    def singleNN_fit(self):

        #添加tensorboard显示
        # board = keras.callbacks.TensorBoard(log_dir='./graph', write_graph = True)
        board = keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=0, batch_size=32, write_graph=True,
                                    write_grads=False, write_images=False, embeddings_freq=0,
                                    embeddings_layer_names=None, embeddings_metadata=None, embeddings_data=None)

        #epochs代表训练多少次
        SingleNN.model.fit(self.x_train,self.y_train,epochs=5,batch_size=32,callbacks=[board])
        # SingleNN.model.fit(self.x_train, self.y_train, epochs=10, batch_size=30000)

        return None
    #准确率评估
    def single_evalue(self):
        test_loss, test_acc = SingleNN.model.evaluate(self.x_test,self.y_test)
        return test_loss,test_acc

    #加载已保存的模型,进行预测
    def single_predict(self):
        if os.path.exists('./cpkt/singleNN.h5'):
            SingleNN.model.load_weights('./cpkt/singleNN.h5')
            single_predict = SingleNN.model.predict(self.x_test)
            return single_predict
        else:
            return None


if __name__ == "__main__":
    new_single = SingleNN()
    new_single.singleNN_compile()
    new_single.singleNN_fit()
    loss,acc = new_single.single_evalue()
    print(loss,acc)
    #保存模型
    # new_single.model.save_weights('./cpkt/singleNN.h5')

    #使用现有模型进行预测
    # single_predict = new_single.single_predict()
    # print(single_predict)
    # #获取到的结果是一个二维数组[60000,10]
    # #对结果进行处理,获取每个样本的预测最大值,得出对应的预测经过
    # #预测结果有10种样本,所以为0~9,
    # predict_max = numpy.argmax(single_predict,1)
    # print(predict_max)
    # print(len(predict_max))
    # print(123)

 执行Tensorboard --logdir命令

C:\Users\RayLu\PycharmProjects\pythonProject1\kares_t>tensorboard --logdir C:\Users\RayLu\PycharmProjects\pythonProject1\kares_t\logs
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.8.0 at http://localhost:6006/ (Press CTRL+C to quit)

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值