解决ValueError: Tensor("Variable:0" dtype=float32_ref) must be from the same graph as Tensor("Reshape:

本文解决在Django框架中调用CNN模型时出现的ValueError错误,通过创建并使用同一计算图确保模型调用成功。

#解决django中调用CNN模型出现ValueError: Tensor(“Variable:0” dtype=float32_ref) must be from the same graph as Tensor(“Reshape:0”, shape=(?, 2 8, 28, 1), dtype=float32)的问题

在同一个.py文件中可以实现,不会报错,在外部的.py文件中调用预测的模型代码报错。

你好! 这是我第一次写博客,原因是最近在学django,里面发文使用了markdown编辑器,正好,在这里练练手,熟悉一下语法,顺便记录一下最近在做物种识别系统遇到的问题,感谢各位大量指教。

##开发工具及版本:pycharm2019.3专业版+django2.0+python3.7

1.首先是在同一个py文件中直接调用,代码和结果如下:

cnn.py:

//预测代码
import numpy as np
import tensorflow as tf
import cv2
class deeper_model:  
    x = tf.placeholder(tf.float32, [None, 784]) 
    # 创建神经网络中间层
    W = tf.Variable(tf.zeros([784, 10]))  #定义权重
    b = tf.Variable(tf.zeros([10])) #定义偏置

    #权重函数,用于初始化
    def weight_variable(self, shape):
        initial = tf.truncated_normal(shape, stddev=0.1) #标准差 stddev用于设置正态分布被截断前的标准差,设置为0.1后,训练精度就达到达到 99.2% 以上
        return tf.Variable(initial)

    #偏置,用于初始化
    def bias_variable(self, shape):
        initial = tf.constant(0.1, shape=shape) #创建常量initial,可设定形状。
        return tf.Variable(initial)

    #卷积操作,步长为1,大小为1*1
    def conv2d(self, x, W):
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')#前后必须为1

    #池化操作 tf.nn.max_pool()和tf.nn.avg_pool()
    def max_pool_2x2(self, x):
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

    # 槽函数--开始识别
    def startRecognize(self,new_img):
        # 读取图片
        or_img = cv2.imdecode(np.fromfile(new_img, dtype=np.uint8), 0)  # 解决中文路径问题
        img = cv2.resize(or_img, (28, 28))
        # print(img.shape)
        one_map = img.flatten()  # 将矩阵拉伸成一维的数组。
        tva = [(255 - x) * 1.0 / 255.0 for x in one_map]  # 将像素正常化为0和1

        # 1.y=relu(wx+b) 第一次卷积池化
        x_image = tf.reshape(self.x, [-1, 28, 28, 1])  # tf.reshape():解决输入图像的维数不符合的情况,-1表示根据实际情况定
        W_conv1 = self.weight_variable([5, 5, 1, 32])  # 卷积核5*5,通道数为1,对应输出32张图
        b_conv1 = self.bias_variable([32])

        h_conv1 = tf.nn.relu(self.conv2d(x_image, W_conv1) + b_conv1)  # 图片变为:(28-1)/1+1=28*28

        h_pool1 = self.max_pool_2x2(h_conv1)  # 池化后变为28/2=14*14

        # 2.y=relu(wx+b) 第二次卷积池化
 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值