Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试打印张量值时出现负维度错误_Python_Tensorflow - Fatal编程技术网

Python 尝试打印张量值时出现负维度错误

Python 尝试打印张量值时出现负维度错误,python,tensorflow,Python,Tensorflow,我将图像输入到预先训练的CNN conv1的第一层,该层计算2D卷积,然后是RELU。我想看看第一层的输出。我使用的代码如下所示: from numpy import * import os #from pylab import * import numpy as np #import matplotlib.pyplot as plt #import matplotlib.cbook as cbook import time from scipy.misc import imread from

我将图像输入到预先训练的CNN conv1的第一层,该层计算2D卷积,然后是RELU。我想看看第一层的输出。我使用的代码如下所示:

from numpy import *
import os
#from pylab import *
import numpy as np
#import matplotlib.pyplot as plt
#import matplotlib.cbook as cbook
import time
from scipy.misc import imread
from scipy.misc import imresize
import matplotlib.image as mpimg
from scipy.ndimage import filters
import urllib
from numpy import random
import tensorflow as tf
from caffe_classes import class_names

train_x = zeros((1, 227,227,3)).astype(float32)
train_y = zeros((1, 1000))
xdim = train_x.shape[1:]
ydim = train_y.shape[1]

#Read Image, and change to BGR
im1 = (imread("dog2.png")[:,:,:3]).astype(float32)
im1 = im1 - mean(im1)
im1[:, :, 0], im1[:, :, 2] = im1[:, :, 2], im1[:, :, 0]

net_data = load(open("bvlc_alexnet.npy", "rb"), encoding="latin1").item()

def conv(input, kernel, biases, k_h, k_w, c_o, s_h, s_w,  padding="VALID", group=1):
    c_i = input.get_shape()[-1]
    assert c_i%group==0
    assert c_o%group==0
    convolve = lambda i, k: tf.nn.conv2d(i, k, [1, s_h, s_w, 1], padding=padding)

    if group==1:
         conv = convolve(input, kernel)
    else:
        input_groups =  tf.split(input, group, 3)   #tf.split(3, group, input)
        kernel_groups = tf.split(kernel, group, 3)  #tf.split(3, group, kernel) 
        output_groups = [convolve(i, k) for i,k in zip(input_groups, kernel_groups)]
        conv = tf.concat(output_groups, 3)          #tf.concat(3, output_groups)
    return  tf.reshape(tf.nn.bias_add(conv, biases), [-1]+conv.get_shape().as_list()[1:])

x = tf.placeholder(tf.float32, (None,) + xdim)

#conv1
#conv(11, 11, 96, 4, 4, padding='VALID', name='conv1')
k_h = 11; k_w = 11; c_o = 96; s_h = 4; s_w = 4
conv1W = tf.Variable(net_data["conv1"][0])
conv1b = tf.Variable(net_data["conv1"][1])
conv1_in = conv(x, conv1W, conv1b, k_h, k_w, c_o, s_h, s_w, padding="SAME", group=1)
conv1 = tf.nn.relu(conv1_in)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
output = sess.run(conv1, feed_dict = {x:[im1]})
我想打印存储在conv1中的值,所以我写:

test = tf.Print(conv1, [conv1])
sess.run(test)
但是,我在运行时收到以下错误消息:

W tensorflow/core/framework/op_kernel.cc:1148] Invalid argument: Shape [-1,227,227,3] has negative dimensions
E tensorflow/core/common_runtime/executor.cc:644] Executor failed to create kernel. Invalid argument: Shape [-1,227,227,3] has negative dimensions
[[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[?,227,227,3], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
使用conv1.eval也会给出相同的错误消息。我正在使用Python 3.5.2。
感谢您的帮助

运行会话并请求输出时,必须提供一个提要,其中包含该输出所依赖的所有占位符。每个会话运行都需要这样做,因为单独的会话运行可以使用不同的输入,例如,这就是使用同一个图执行重复推断的方式

在本例中,您正在tensor测试上运行会话,该测试依赖于conv1,而conv1又依赖于占位符x

更改为sess.runtest,feed_dict={x:[im1]}应该可以解决您的问题

但是,如果您只想查看张量conv1的值,那么这正是调用sess.runconv1的返回值,因此您可能根本不需要tf.Print