Я просто использую изображение загрузки scikit-изображения из папки, но когда я запускаю функцию get_batches()
, произошла ошибка.Я просмотрел некоторые блоги, но проблема все еще сохраняется.Я не знаю, как с этим справиться.
Проблема возникла в image = tf.cast(image, tf.string)
, она находится в функции get_batches()
.
Environment:
python 3.6
, tensorflow 1.12.0
, scikit-image
, matplotlib
.
Я новичок.Я не знаю, что вызвало проблему.Ниже был мой код.Я не знаю, как справиться с этой проблемой.Если у кого-то есть хорошие идеи, можете рассказать мне и в разделе комментариев.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
import skimage
from skimage import io
import re
#find "cat" or "dog" from string
def find_word_in_string(directory, word, return_number=0):
matchObj = re.search(word, directory, re.M|re.I)
if matchObj:
return return_number
else:
return -1
# label to image,if "cat" the label is 0, if dog the label is 1.
def find_method(directory):
word = "cat"
result = -1
if word == "cat":
result = directory.find(word)
if result != -1:
return 0
word = "dog"
if word == "dog":
result = directory.find(word)
if result != -1:
return 1
return result
# save date to .txt file.
def write_data_to_txt(data, path, authority):
string_data = "".join(str(s) for s in data)
performance = open(path,authority)
performance.write(string_data)
performance.close()
def show_image(imglist):
count = 0
for i in imglist[:10]:
count += 1
print("----->",count)
io.imshow(i)
io.show() #Sometime the picture was display,should add this API.
def load_data(data_dir):
# Get all subdirectories of data_dir. Each represents a label.
directories = [d for d in os.listdir(data_dir)
if os.path.isdir(os.path.join(data_dir, d))]
for d in os.listdir(data_dir):
path = data_dir+ "\\"+ d
if os.path.isfile(path):
directories.append(path)
labels = []
images = []
for f in directories:
#Load an image from file.
images.append(skimage.data.imread(f))
label = find_method(f)
if label != -1:
labels.append(label)
else:
print("No match!!")
write_data_to_txt(labels,"G:\\DeepLearning\\CatOrDogDataset\\labels.txt","w+")
return images, labels
def get_batches(image, label, resize_w, resize_h, batch_size, capacity):
#tfansform imagelist to tf.string
#transform label to tf.int64
image = tf.cast(image, tf.string)
label = tf.cast(label, tf.int64) #
queue = tf.train.slice_input_producer([image, label])
label = queue[1]
image_temp = tf.read_file(queue[0])
image = tf.image.decode_jpeg(image_temp, channels = 3)
#resize image
image = tf.image.resize_image_with_crop_or_pad(image, resize_w, resize_h)
image = tf.image.per_image_standardization(image)
image_batch, label_batch = tf.train.batch([image, label], batch_size = batch_size,
num_threads = 64,capacity = capacity)
images_batch = tf.cast(image_batch, tf.float32)
labels_batch = tf.reshape(label_batch, [batch_size])
return images_batch, labels_batch
train_data_dir = "G:\\DeepLearning\\CatOrDogDataset\\new_train"
images, labels = load_data(train_data_dir)
show_image(images)
train_images_batch, train_labels_batch = get_batches(images, labels, 64, 64, 32,32)
print("----->finished!")