• TensorFlow


    TensorFlow 是一种流行的机器学习开源库,由 Google 开发并在 2015 年公开发布。它的设计灵感来自于神经网络和深度学习的研究,因此主要用于构建机器学习模型和进行大规模数据处理。

    TensorFlow 的基本概念包括:

    1. 张量 (Tensor):TensorFlow 的核心数据结构,它是一个多维数组,可以是标量 (0-D)、向量 (1-D)、矩阵 (2-D) 或更高维的数组。

    2. 计算图 (Computation Graph):它是一系列节点 (Node) 和边 (Edge) 的有向图,表示计算过程。每个节点代表一个操作 (Operation),边表示张量在操作之间的传递。

    3. 会话 (Session):它是建立和执行计算图的环境,可以使用 CPU 或 GPU 进行计算。

    4. 变量 (Variable):它是在计算图中保持状态的节点,可以在训练模型时不断更新。

    TensorFlow 的使用场景包括:

    1. 图像识别和分类:TensorFlow 可以用于构建卷积神经网络 (CNN) 模型,以实现图像识别和分类的任务。

    2. 自然语言处理:TensorFlow 可以用于构建循环神经网络 (RNN) 模型,以实现机器翻译、情感分析和语音识别等自然语言处理任务。

    3. 推荐系统:TensorFlow 可以用于构建深度学习模型,以实现个性化推荐和广告推荐等任务。

    4. 数据分析和可视化:TensorFlow 可以用于数据分析和可视化,例如数据聚类、数据降维和数据可视化等任务。

    例:用python的Tensorflow来写一个脉冲神经网络,权重矩阵使用忆阻器模型,神经元采用LIF模型,图片边缘特征提取的脉冲神经网络,输出原始图片与边缘特征图,输入的图片为MHW.jpg

    首先需要安装tensorflow和opencv-python库。本例中使用tensorflow 2.x版本和opencv-python 4.x版本。

    !pip install tensorflow
    !pip install opencv-python
    
    • 1
    • 2

    接着,我们从文件中读入图片并进行预处理,包括图像大小调整、像素值范围调整和格式转换。

    import cv2
    import numpy as np
    
    # 读取图像,调整大小和像素值范围
    img = cv2.imread('MHW.jpg')
    img = cv2.resize(img, (128, 128))
    img = np.array(img, dtype=np.float32) / 255.0
    # 转换为灰度图
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 转换为TensorFlow要求的格式
    img_gray = np.expand_dims(img_gray, axis=-1)
    img_input = np.expand_dims(img_gray, axis=0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    接下来,我们定义忆阻器模型类和LIF模型类,用于构建脉冲神经网络。

    class Memristor:
        def __init__(self, shape):
            self.weights = tf.Variable(tf.initializers.glorot_uniform()(shape), dtype=tf.float32)
            self.conductance = tf.Variable(tf.initializers.glorot_uniform()(shape), dtype=tf.float32)
            self.resistance = tf.Variable(tf.initializers.glorot_uniform()(shape), dtype=tf.float32)
            self.memristance = self.conductance * self.resistance
            self.q = tf.Variable(tf.zeros(shape), dtype=tf.float32)
    
        def __call__(self, input, tau_m, dt):
            v = input
            q = self.q
            weights = self.weights
            memristance = self.memristance
    
            dv = -v / tau_m + tf.tensordot(weights, q, [[3], [2]]) / memristance
            dq = -q / tau_m + v
    
            v = v + dv * dt
            q = q + dq * dt
    
            self.q.assign(q)
    
            return v
    
    
    class LIF:
        def __init__(self, shape, tau_ref, tau_m):
            self.weights = tf.Variable(tf.initializers.glorot_uniform()(shape), dtype=tf.float32)
            self.bias = tf.Variable(tf.initializers.glorot_uniform()(shape[-1:]), dtype=tf.float32)
            self.memristor = Memristor(shape)
            self.voltage = tf.Variable(tf.zeros(shape[:-1] + (shape[-1] + 1,)), dtype=tf.float32)
            self.refractory = tf.Variable(tf.zeros(shape[:-1] + (1,)), dtype=tf.float32)
            self.tau_ref = tau_ref
            self.tau_m = tau_m
    
        def __call__(self, input, dt):
            weights = self.weights
            memristor = self.memristor
            bias = self
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    C++11 之 override
    php面试常问面试题
    EM聚类(下):用EM算法对王者荣耀英雄进行划分
    Mysql数据库时间和系统时间不一致问题
    Kvaser Leaf light HS v2 | 如何使用Excel发送和接收CAN报文数据
    Java、Spring、Dubbo三者SPI机制原理与区别
    BSP视频教程第28期:CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法
    QT事件介绍
    新的centos7.9安装jenkins—(一)
    python实现批量数据库数据插入
  • 原文地址:https://blog.csdn.net/xin980724/article/details/132813302