占位符返回gen_array_ops。_placeholder(dtype = dtype形状=形状,name =名称)

时间:2022-03-10 21:22:23

I am trying to do classification between dogs and cats; for this I use a CNN model, but when I place the Image matrix to tf.placeholder, I get an error that "placeholder return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)", but I don't understand the problem.

我试着在狗和猫之间进行分类;为此,我使用CNN模型,但是当我将图像矩阵放置到tf时。占位符,我得到一个错误“占位符返回gen_array_ops。_placeholder(dtype = dtype形状=形状,name =名称),但我不明白这个问题。

How can I fix this?

我怎么解决这个问题?

My code:

我的代码:

import os
import warnings
import glob
import h5py
import tensorflow as tf
import math as mt
import numpy as np
import cv2 as cv
from matplotlib import pyplot
from tflearn.data_utils import image_preloader
from random import shuffle
import tflearn as tfl
warnings.simplefilter("ignore")
path="E:\data\minimum"
path1='E:\data\\train.txt'
path2='E:\data\\testing.txt'
path3='E:\data\\validation.txt'
training=0.7
testing=0.2
validation=0.1
list=os.listdir(path)
shuffle(list)
lenght=len(list)
file=open(path1,'w')
train=list[0: int(training*lenght)]
for i in train:
    if(i[0:3]=='cat'):
        file.write(path + '/'+ i + ' 0\n')
    elif(i[0:3]=='dog'):
        file.write(path + '/'+ i + ' 1\n')
file.close()
file=open(path3,'w')
train=list[0: int(validation*lenght)]
for i in train:
    if(i[0:3]=='cat'):
        file.write(path + '/'+ i + ' 0\n')
    elif(i[0:3]=='dog'):
        file.write(path + '/'+ i + ' 1\n')
file.close()
file=open(path2,'w')
train=list[0: int(testing*lenght)]
for i in train:
    if(i[0:3]=='cat'):
        file.write(path + '/'+ i + ' 0\n')
    elif(i[0:3]=='dog'):
        file.write(path + '/'+ i + ' 1\n')
file.close()

X_train, Y_train =image_preloader(path1, image_shape=(50,50),mode='file', categorical_labels=True,normalize=True)
X_test, Y_test =image_preloader(path2, image_shape=(50,50),mode='file', categorical_labels=True,normalize=True)
X_val, Y_val =image_preloader(path3, image_shape=(50,50),mode='file', categorical_labels=True,normalize=True)
print ("Dataset")
print ("Number of training images {}".format(len(X_train)))
print ("Number of testing images {}".format(len(X_test)))
print ("Number of validation images {}".format(len(X_val)))
print ("Shape of an image {}" .format(X_train[1].shape))
print ("Shape of label:{} ,number of classes: {}".format(Y_train[1].shape,len(Y_train[1])))

pyplot.imshow(X_train[1])
pyplot.axis('off')
pyplot.title('Sample image with label {}'.format(Y_train[1]))
pyplot.show()


X=tf.placeholder(tf.float32,shape=[None,56,56],name='input image')
Y=tf.placeholder(tf.float32,shape=[None,56,56],name='label')
## convulotion layer started code starting from this point
input_layer=X

CLayer1=tfl.layers.conv.conv_2d(input_layer,nb_filter=64,filter_size=5,strides=[1,1,1,1],padding='same',activation='relu',regularizer='L2',name='layer1')
outlayer1=tfl.layers.conv.max_pool_2d(CLayer1,2)

CLayer2=tfl.layers.conv.conv_2d(outlayer1,nb_filter=128,filter_size=5,strides=[1,1,1,1],padding='same',activation='relu',regularizer='L2',name='layer2')
outlayer2=tfl.layers.conv.max_pool_2d(CLayer2,2)

CLayer3=tfl.layers.conv.conv_2d(outlayer2,nb_filter=128,filter_size=5,strides=[1,1,1,1],padding='same',activation='relu',regularizer='L2',name='layer3')
outlayer3=tfl.layers.conv.max_pool_2d(CLayer3,2)

ConnectedL1=tfl.layers.fully_connected(outlayer3,4096)
dropout1 = tfl.layers.core.dropout(ConnectedL1, 0.8)

ConnectedL2=tfl.layers.fully_connected(dropout1,4096)
dropout2 = tfl.layers.core.dropout(ConnectedL2, 0.8)

prediction = tfl.layers.core.fully_connected(dropout2, 2, activation='softmax', name='output')

#loss
cross_entropy = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(prediction+np.exp(-10)), reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

correct_prediction = tf.equal(tf.argmax(prediction,1), tf.argmax(Y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# session parameters
sess = tf.InteractiveSession()
#initialising variables
sess = tf.InteractiveSession(config=tf.ConfigProto(log_device_placement=False))
init = tf.global_variables_initializer()
sess.run(init)
saver = tf.train.Saver()
save_path="/Users/Enkay/Documents/Viky/python/img-classification/mark3.ckpt"
# grabbing the default graph
g = tf.get_default_graph()

# every operations in our graph
[op.name for op in g.get_operations()]

epoch=5
batch_size=4
no_itr_per_epoch=len(X_train)
n_test=len(X_test)
n_val=len(X_val)

# Now iterate over our dataset n_epoch times
for iteration in range(epoch):
    print("Iteration no: {} ".format(iteration))

    previous_batch = 0
    # Do our mini batches:
    for i in range(no_itr_per_epoch):
        current_batch = previous_batch + batch_size
        x_input = X_train[previous_batch:current_batch]
        x_images = np.reshape(x_input, [batch_size, 50, 50, 3])

        y_input = Y_train[previous_batch:current_batch]
        y_label = np.reshape(y_input, [batch_size, 2])
        previous_batch = previous_batch + batch_size

        _, loss = sess.run([train_step, cross_entropy], feed_dict={X: x_images,Y: y_label})
        if i % 100 == 0:
            print("Training loss : {}".format(loss))

    x_test_images = np.reshape(X_test[0:n_test], [n_test, 50, 50, 3])
    y_test_labels = np.reshape(Y_test[0:n_test], [n_test, 2])
    Accuracy_test = sess.run(accuracy,
                             feed_dict={
                                 X: x_test_images,
                                 Y: y_test_labels
                             })
    Accuracy_test = round(Accuracy_test * 100, 2)

    x_val_images = np.reshape(X_val[0:n_val], [n_val, 50, 50, 3])
    y_val_labels = np.reshape(Y_val[0:n_val], [n_val, 2])
    Accuracy_val = sess.run(accuracy,
                            feed_dict={
                                X: x_val_images,
                                Y: y_val_labels
                            })
    Accuracy_val = round(Accuracy_val * 100, 2)
    print("Accuracy ::  Test_set {} % , Validation_set {} % ".format(Accuracy_test, Accuracy_val))

Error:

错误:

File "E:/pythonproject2/TASK/__init__.py", line 67, in <module>
    X=tf.placeholder(tf.float32,shape=[None,56,56],name='input image')
  File "C:\Users\salma\Anaconda4\envs\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1746, in placeholder
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name)
  File "C:\Users\salma\Anaconda4\envs\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 4026, in _placeholder
    "Placeholder", dtype=dtype, shape=shape, name=name)
  File "C:\Users\salma\Anaconda4\envs\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 394, in _apply_op_helper
    with g.as_default(), ops.name_scope(name) as scope:
  File "C:\Users\salma\Anaconda4\envs\lib\site-packages\tensorflow\python\framework\ops.py", line 5621, in __enter__
    return self._name_scope.__enter__()
  File "C:\Users\salma\Anaconda4\envs\lib\contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "C:\Users\salma\Anaconda4\envs\lib\site-packages\tensorflow\python\framework\ops.py", line 3949, in name_scope
    raise ValueError("'%s' is not a valid scope name" % name)
ValueError: 'input image' is not a valid scope name

1 个解决方案

#1


2  

You can not use an arbitrary scope name. Problem is with

不能使用任意的范围名称。问题是

X=tf.placeholder(tf.float32,shape=[None,56,56],name='input image')

You cannot use spaces in the scope name strings and you can fix it by modifying the scope

您不能在范围名称字符串中使用空格,您可以通过修改范围来修复它

X=tf.placeholder(tf.float32,shape=[None,56,56],name='input_image')

See What are the contraints for tensorflow scope names?

看什么是对tensorflow范围名称的限制?

#1


2  

You can not use an arbitrary scope name. Problem is with

不能使用任意的范围名称。问题是

X=tf.placeholder(tf.float32,shape=[None,56,56],name='input image')

You cannot use spaces in the scope name strings and you can fix it by modifying the scope

您不能在范围名称字符串中使用空格,您可以通过修改范围来修复它

X=tf.placeholder(tf.float32,shape=[None,56,56],name='input_image')

See What are the contraints for tensorflow scope names?

看什么是对tensorflow范围名称的限制?