我正在做cs231n赋值2并遇到了这个问题。
我正在使用tensorflow-gpu 1.5.0
代码如下
# define our input (e.g. the data that changes every batch)
# The first dim is None, and gets sets automatically based on batch size fed in
X = tf.placeholder(tf.float32, [None, 32, 32, 3])
y = tf.placeholder(tf.int64, [None])
is_training = tf.placeholder(tf.bool)
# define model
def complex_model(X,y,is_training):
pass
y_out = complex_model(X,y,is_training)
# Now we're going to feed a random batch into the model
# and make sure the output is the right size
x = np.random.randn(64, 32, 32,3)
with tf.Session() as sess:
with tf.device("/cpu:0"): #"/cpu:0" or "/gpu:0"
tf.global_variables_initializer().run()
ans = sess.run(y_out,feed_dict={X:x,is_training:True})
%timeit sess.run(y_out,feed_dict={X:x,is_training:True})
print(ans.shape)
print(np.array_equal(ans.shape, np.array([64, 10])))
完成追溯
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-97f0b6c5a72e> in <module>()
6 tf.global_variables_initializer().run()
7
----> 8 ans = sess.run(y_out,feed_dict={X:x,is_training:True})
9 get_ipython().run_line_magic('timeit', 'sess.run(y_out,feed_dict={X:x,is_training:True})')
10 print(ans.shape)
c:\users\kasper\appdata\local\programs\python\python36\lib\site- packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
893 try:
894 result = self._run(None, fetches, feed_dict, options_ptr,
--> 895 run_metadata_ptr)
896 if run_metadata:
897 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
c:\users\kasper\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
1111 # Create a fetch handler to take care of the structure of fetches.
1112 fetch_handler = _FetchHandler(
-> 1113 self._graph, fetches, feed_dict_tensor, feed_handles=feed_handles)
1114
1115 # Run request and get response.
c:\users\kasper\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\client\session.py in __init__(self, graph, fetches, feeds, feed_handles)
419 with graph.as_default():
--> 420 self._fetch_mapper = _FetchMapper.for_fetch(fetches)
421 self._fetches = []
422 self._targets = []
c:\users\kasper\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\client\session.py in for_fetch(fetch)
235 if fetch is None:
236 raise TypeError('Fetch argument %r has invalid type %r' %
--> 237 (fetch, type(fetch)))
238 elif isinstance(fetch, (list, tuple)):
239 # NOTE(touts): This is also the code path for namedtuples.
TypeError: Fetch argument None has invalid type <class 'NoneType'>
我之前在网站上看到过类似的问题,但那些似乎并不能解决我的问题。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
问题是y_out
的{{1}}参数是sess.run()
,而它必须是None
(或类似张量的对象,例如{{1} }}或tf.Tensor
。
在您的示例中,tf.Variable
由以下代码定义:
tf.Operation
y_out
未返回值,因此# define model
def complex_model(X,y,is_training):
pass
y_out = complex_model(X,y,is_training)
会将complex_model()
设置为y_out = complex_model(...)
。我不确定此函数是否代表您的实际代码,但您的真实y_out
函数可能也缺少None
语句。
答案 1 :(得分:1)
我相信 mrry 是对的。
如果您再次查看笔记本Assignment 2 - Tensorflow.ipynb,您会注意到描述单元格如下:
培训特定模型
在本节中,我们将为您构建一个模型。 这里的目标不是获得良好的表现(那将是下一个),但是 而是要熟悉TensorFlow 文档和配置自己的模型。
使用上面提供的代码作为指导,并使用以下内容 TensorFlow文档,使用以下内容指定模型 架构:
7x7 Convolutional Layer with 32 filters and stride of 1 ReLU Activation Layer Spatial Batch Normalization Layer (trainable parameters, with scale and centering) 2x2 Max Pooling layer with a stride of 2 Affine layer with 1024 output units ReLU Activation Layer Affine layer from 1024 input units to 10 outputs
要求您在函数
中定义模型# define model
def complex_model(X,y,is_training):
pass
就像他们在
中所做的那样def simple_model(X,y):
# define our weights (e.g. init_two_layer_convnet)
# setup variables
Wconv1 = tf.get_variable("Wconv1", shape=[7, 7, 3, 32])
bconv1 = tf.get_variable("bconv1", shape=[32])
W1 = tf.get_variable("W1", shape=[5408, 10])
b1 = tf.get_variable("b1", shape=[10])
# define our graph (e.g. two_layer_convnet)
a1 = tf.nn.conv2d(X, Wconv1, strides=[1,2,2,1], padding='VALID') + bconv1
h1 = tf.nn.relu(a1)
h1_flat = tf.reshape(h1,[-1,5408])
y_out = tf.matmul(h1_flat,W1) + b1
return y_out
希望这有帮助!