Python tensorflow占位符中出现错误。

Python tensorflow占位符中出现错误。,python,numpy,tensorflow,Python,Numpy,Tensorflow,我使用的是Alexnet,在flowers数据上进行了微调,有5个类。现在,我想使用微调模型进行预测。下面显示的是主要代码 import os import numpy as np import tensorflow as tf from datetime import datetime from alexnet_flower import AlexNet from datagenerator import ImageDataGenerator from scipy.misc import i

我使用的是Alexnet,在flowers数据上进行了微调,有5个类。现在,我想使用微调模型进行预测。下面显示的是主要代码

import os
import numpy as np
import tensorflow as tf
from datetime import datetime
from alexnet_flower import AlexNet
from datagenerator import ImageDataGenerator

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

from tensorflow.core.protobuf import saver_pb2

im1 = (imread("one.png")[:,:,:3]).astype(float32)
#print(im1.shape())
im1 = im1 - mean(im1)
#im1 = imresize(im1,[227,227,3])
im1[:, :, 0], im1[:, :, 2] = im1[:, :, 2], im1[:, :, 0]

im2 = (imread("two.png")[:,:,:3]).astype(float32)
im2 = im2 - mean(im2)
#im2 = imresize(im2,[227,227,3])
im2[:, :, 0], im2[:, :, 2] = im2[:, :, 2], im2[:, :, 0]

"""
Configuration settings
"""

print(im1.shape)
num_classes  = 5
x = tf.placeholder(tf.float32, [2, 227, 227, 3])
#y = tf.placeholder(tf.float32, [None, num_classes])
keep_prob = tf.placeholder(tf.float32)

#print(x)

# Initialize model
model = AlexNet(x,keep_prob,num_classes)

# Link variable to model output
score = model.fc8

saver = tf.train.Saver(write_version = saver_pb2.SaverDef.V1)

#x1 = tf.placeholder(tf.float32, (None,) + xdim)

with tf.Session() as sess:

  # Initialize all variables
  sess.run(tf.global_variables_initializer())

  # Add the model graph to TensorBoard

  # Load the pretrained weights into the non-trainable layer
  saver.restore(sess,"/home/saurabh/deep_learning/tests/finetune_alexnet_with_tensorflow/model_epoch1.ckpt")
 # x1:[im1,im2]
  print('error!!!!!!')

  output = sess.run(score, feed_dict = {x:[im1,im2]})
我使用此代码的代码。我认为alexnet代码没有问题,因为我使用了这段代码进行了微调

最后我犯了这个错误。我试了很多次来调试它,我无法理解这个问题。谢谢你的帮助

   Traceback (most recent call last):
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1021, in _do_call
    return fn(*args)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1003, in _run_fn
    status, run_metadata)
  File "/home/saurabh/anaconda3/lib/python3.6/contextlib.py", line 89, in __exit__
    next(self.gen)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 469, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "finetune_prediction_flowers.py", line 81, in <module>
    output = sess.run(score, feed_dict = {x:[im1,im2]})
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 766, in run
    run_metadata_ptr)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 964, in _run
    feed_dict_string, options, run_metadata)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1014, in _do_run
    target_list, options, run_metadata)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1034, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'Placeholder_1', defined at:
  File "finetune_prediction_flowers.py", line 56, in <module>
    keep_prob = tf.placeholder(tf.float32)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 1587, in placeholder
    name=name)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 2043, in _placeholder
    name=name)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op
    op_def=op_def)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2240, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/saurabh/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1128, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
回溯(最近一次呼叫最后一次):
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第1021行,在
返回fn(*args)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第1003行,在
状态,运行(元数据)
文件“/home/saurabh/anaconda3/lib/python3.6/contextlib.py”,第89行,在__
下一个(self.gen)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/errors\u impl.py”,第469行,处于raise\u exception\u on\u not\u ok\u状态
pywrap_tensorflow.TF_GetCode(状态))
tensorflow.python.framework.errors\u impl.InvalidArgumentError:必须使用dtype float为占位符tensor“placeholder\u 1”提供一个值
[[Node:Placeholder_1=Placeholder[dtype=DT_FLOAT,shape=[],[u device=“/job:localhost/replica:0/task:0/cpu:0”]()]
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“finetune\u prediction\u flowers.py”,第81行,在
output=sess.run(score,feed_dict={x:[im1,im2]})
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第766行,正在运行
运行_元数据_ptr)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第964行,正在运行
提要(dict字符串、选项、运行元数据)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第1014行,运行
目标\u列表、选项、运行\u元数据)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/client/session.py”,第1034行,在
提升类型(e)(节点定义、操作、消息)
tensorflow.python.framework.errors\u impl.InvalidArgumentError:必须使用dtype float为占位符tensor“placeholder\u 1”提供一个值
[[Node:Placeholder_1=Placeholder[dtype=DT_FLOAT,shape=[],[u device=“/job:localhost/replica:0/task:0/cpu:0”]()]
由op“占位符_1”引起,定义于:
文件“finetune\u prediction\u flowers.py”,第56行,在
keep_prob=tf.placeholder(tf.float32)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/array_ops.py”,第1587行,在占位符中
名称=名称)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/gen_array_ops.py”,第2043行,在_占位符中
名称=名称)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/op_def_library.py”,第759行,在apply_op
op_def=op_def)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/ops.py”,第2240行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/home/saurabh/anaconda3/lib/python3.6/site packages/tensorflow/python/framework/ops.py”,第1128行,在__
self.\u traceback=\u extract\u stack()
InvalidArgumentError(回溯见上文):必须为带有dtype float的占位符张量“占位符_1”提供一个值
[[Node:Placeholder_1=Placeholder[dtype=DT_FLOAT,shape=[],[u device=“/job:localhost/replica:0/task:0/cpu:0”]()]

错误信息非常清楚:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
含义:您必须向占位符
keep_prob
提供一个值,因为您在调用
sess.run
时请求
score
,这反过来要求
keep_prob
具有一个值。因此,只需将保留概率设置为您想要的值(例如,此处为0.8):


顺便说一下:如果要从检查点恢复,则无需调用sess.run(tf.global\u variables\u initializer())错误消息非常清楚:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder_1' with dtype float
     [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
含义:您必须向占位符
keep_prob
提供一个值,因为您在调用
sess.run
时请求
score
,这反过来要求
keep_prob
具有一个值。因此,只需将保留概率设置为您想要的值(例如,此处为0.8):


顺便说一下:如果您是从检查点恢复,则无需调用
sess.run(tf.global\u variables\u initializer())

谢谢!至少错误消失了。你能告诉我这个概率分数是用来做什么的吗?另外,我应该在代码中做什么更改来获得特定图像的每个类的概率值,而不是分数,因为之前我使用相同的代码来获得概率值。提前谢谢!我得到了我必须做出的改变来获得概率。你能告诉我为什么在这里给出概率值,它有什么用?谢谢我不知道AlexNet,但通常保留概率指的是辍学正则化。在退出期间,一个单元以概率
keep_prob
保持(即不变),并以概率
1-keep_prob
退出。通常辍学只在训练中使用,因此在测试时考虑禁用辍学,即设置<代码> KeePyPro < /C> > 1。但是,您必须再次检查
AlexNet
的实现,以确保此参数指的是辍学正则化。谢谢!至少错误消失了。你能告诉我这个概率分数是用来做什么的吗?另外,我应该在代码中做什么更改来获得特定图像的每个类的概率值,而不是分数,因为之前我使用相同的代码来获得概率值。提前谢谢!我得到了我必须做出的改变来获得概率。你能告诉我为什么在这里给出概率值,它有什么用?谢谢我不知道,但是