tensorflow 图像分类 demo

代码从 https://tensorflow.google.cn/tutorials/keras/classification 搬移
改了一下输入的构造 (仅是一个 demo 输入构造简化了很多)
代码中使用 图像数据下载链接 https://download.csdn.net/download/zslngu/16165364

最终的结果
最终的结果

1. 输入准备

首先拿到 0~9 数字的图片,清理成下面这种格式

数字 0 示例 (文件暂时命名为 0.model)

01111110
01111111
11100111
11100011
11100011
11000011
11100011
11100011
11100111
01111110
01111110

因为是 demo 所以简单构造一下输入 将所有数字的图形信息都复制一下

def copy_data():
    l = [str(i) for i in range(0, 10)]
    for ll in l:
        path = "./tf/" + str(ll) + ".model"
        with open(path, "r") as f:
            cur = f.read()
            for j in range(0, 15):
               # s_path ex: 0_1.model 生成15个一样的输入
                s_path = "./tf/" + str(ll) + "_" + str(j) + ".model"
                with open(s_path, "w") as wf:
                    wf.write(cur)

这样一共生成 10 * 15 个图像数据

2. 格式化输入

代码引用的库 & 环境配置

import os
model_path = "代码根目录"
os.chdir(model_path)
import cv2
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras

将原始内容可视化

trains = []
labels=[]

def get_train(path):
    with open(path, "r") as f:
        cur = f.read()
        lines = cur.split("\n")
        strs = [list(l) for l in lines]
        return np.array(strs, dtype='uint8')

for file in os.listdir("."):
    if file.find("_") == -1:
        continue
    trains.append(get_train(file))
    labels.append(file.split("_")[0])
    
plt.figure(figsize=(10,10))
for i in range(10):
    m = get_train(str(i) + '.model')
    plt.subplot(5, 5, (i + 1))
    plt.imshow(m)
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(str(i))

结果如下:
0~9
获取 训练集合 和 标签集合

for file in os.listdir("."):
    if file.find("_") == -1:
        continue
    trains.append(get_train(file))
    labels.append(file.split("_")[0])

3. 构建 model

# 这些层 & 优化 & 损失函数 是官网源文档的配置
models = keras.Sequential([
    keras.layers.Flatten(input_shape=(11, 8)),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.Dense(10)])
models.compile(
    optimizer = 'adam',
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=['accuracy']
)

训练

models.fit(np.array(trains), np.array(labels, dtype="uint8"), epochs=10)

训练结果

4. 预测

构建预测的model

#SoftMax 将预测结果转为概率
predict_model = tf.keras.Sequential([models, tf.keras.layers.Softmax()])

预测 可以看到预测为数字0的概率为0.81

get_train("0.model")
predict_model.predict(np.array([get_train("0.model")]))

预测结果
再用 9 看一下
9的预测结果

5. 完整的模型相关代码

import os
import cv2
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras

model_path = "./tf" # 所有的图形信息文件放在代码同目录 tf文件夹下 后缀名为.model
os.chdir(model_path)


trains = []
labels=[]

def get_train(path):
    with open(path, "r") as f:
        cur = f.read()
        lines = cur.split("\n")
        strs = [list(l) for l in lines]
        return np.array(strs, dtype='uint8')

for file in os.listdir("."):
    if file.find("_") == -1:
        continue
    trains.append(get_train(file))
    labels.append(file.split("_")[0])

models = keras.Sequential([
    keras.layers.Flatten(input_shape=(11, 8)),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.Dense(10)])

models.compile(
    optimizer = 'adam',
    loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=['accuracy']
)

models.fit(np.array(trains), np.array(labels, dtype="uint8"), epochs=10)
predict_model = tf.keras.Sequential([models, tf.keras.layers.Softmax()])

if __name__ == '__main__':
    tests = []
    for i in range(10):
        tests.append(get_train(str(i) + ".model"))

    rs = predict_model.predict(np.array(tests))
    for i in range(10):
        print("数字 %s 预测为 %s 的概率为 %s" % (str(i), str(i), rs[i][i]))


结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
TensorFlow是谷歌开发的一个开源机器学习框架,Python是一种广泛使用的编程语言,两者结合起来可以实现深度学习,自然语言处理,计算机视觉等多个领域的应用。本文将提供一个TensorFlow Python3 Demo实例,介绍如何使用TensorFlow实现MNIST数字识别任务。 首先,我们需要安装TensorFlow和其他必要的依赖项。可以使用pip命令直接进行安装,示例代码如下: ``` pip install tensorflow matplotlib numpy ``` 接下来,我们需要导入必要的库和模块: ``` import tensorflow as tf import matplotlib.pyplot as plt import numpy as np ``` 现在,我们可以开始构建模型。这里我们采用经典的卷积神经网络(CNN)架构,包括卷积层,池化层,全连接层和dropout操作。其中,卷积和池化层用于提取图片的特征,全连接层用于分类,dropout层用于防止过拟合。 ``` model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) ``` 在构建模型后,我们需要对其进行编译,即选择损失函数,优化器和评估标准。这里我们选择交叉熵作为损失函数,Adam优化器和准确率作为评估标准。 ``` model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 接下来,我们需要加载数据。MNIST是一个手写数字数据集,包含0-9十个数字的灰度图像,每张图片的大小为28x28。我们可以使用TensorFlow提供的API方便地加载数据。 ``` mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) ``` 在加载数据后,我们可以开始训练模型。这里我们使用fit方法进行训练,指定训练数据,验证数据,训练轮数和批次大小。 ``` history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), batch_size=32) ``` 最后,我们可以使用matplotlib库绘制损失函数和准确率的变化趋势。 ``` plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.legend() plt.show() plt.plot(history.history['accuracy'], label='Training Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.legend() plt.show() ``` 完整的TensorFlow Python3 Demo代码如下: ``` import tensorflow as tf import matplotlib.pyplot as plt import numpy as np model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), batch_size=32) plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.legend() plt.show() plt.plot(history.history['accuracy'], label='Training Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.legend() plt.show() ``` 通过以上示例,可以很好地了解如何使用TensorFlow实现一个数字识别任务。当然,TensorFlow还有很多其他功能和API,需要更深入的学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值