#解决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) 第二次卷积池化

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





