问题描述
在 TPU 中实现 TensorFlow 时出现错误
UnimplementedError: File system scheme '[local]' not implemented (file: '1.png')
我知道这个问题已经回答了 before 但我的问题是不同的, 当我这样做时,我收到此错误
for i,j in train_dataset.take(3):
print(i,j)
它适用于 train_dataset.take(3)
这是我的功能
def decode(img,image_size=(IMG_SIZE,IMG_SIZE)):
bits = tf.io.read_file(img)
image = tf.image.decode_jpeg(bits,channels=3)
image = tf.cast(image,tf.float32) / 255.0
image = tf.image.resize(image,image_size)
image = tf.image.random_flip_left_right(image,seed=2020)
image = tf.image.random_flip_up_down(image,seed=2020)
image = tf.image.random_crop(image,size=[IMG_SIZE,IMG_SIZE,3],seed=2020 )
image = tf.image.random_brightness(image,max_delta=0.5 )
image = tf.image.rot90(image)
return image
def decode_image(img,labels=None ):
if labels is None:
return decode(img)
else:
return decode(img),labels
train_image=tf.data.Dataset.from_tensor_slices((train.iloc[:,0],train.iloc[:,1::] ))
train_dataset=train_image.map(decode_image,num_parallel_calls=AUTO).repeat().shuffle(512).batch(BATCH_SIZE).prefetch(AUTO)
test_image=tf.data.Dataset.from_tensor_slices((test.iloc[:,0]))
test_dataset=test_image.map(decode_image,num_parallel_calls=AUTO).batch(BATCH_SIZE)
我该如何解决?
可能是路径问题。所以我添加了如何设置路径 这是目录的样子
weights
images
-train
--train
---train
----img1
----img2
---csv
-val
--val
---img1
当我跑步时
GCS_DS_PATH = kaggleDatasets().get_gcs_path('images')
!gsutil ls $GCS_DS_PATH
我得到了关注
gs://kds-aab923e1c9bc934f088881f1e537365b8f18fe192b3b3dc14e272a37/train/
gs://kds-aab923e1c9bc934f088881f1e537365b8f18fe192b3b3dc14e272a37/val/
我的路径是这样设置的
def train_format_path(st):
return GCS_DS_PATH + '/train/train/train/' + st
def test_format_path(st):
return GCS_DS_PATH + '/val/val/' + st
train_paths = train.ID.apply(train_format_path).values
test_paths = test.ID.apply(test_format_path).values
与train_paths[0]
我得到了
'gs://kds-aab923e1c9bc934f088881f1e537365b8f18fe192b3b3dc14e272a37/train/train/train/1.png'
解决方法
正如@Allen Wang 所建议的,解决方案是使用 train_paths
而不是 train 来传递图像。
这是我要使它工作的更改
train_image=tf.data.Dataset.from_tensor_slices((train_paths,train.iloc[:,1::] ))
train_dataset=train_image.map(decode_image,num_parallel_calls=AUTO).repeat().shuffle(512).batch(BATCH_SIZE).prefetch(AUTO)
test_image=tf.data.Dataset.from_tensor_slices((test_paths))
test_dataset=test_image.map(decode_image,num_parallel_calls=AUTO).batch(BATCH_SIZE)