代碼如下
import os
import tensorflow as tf
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#cwd='./data/train/'
cwd='./data/test/'
classes={'mask','nomask'} #人為設定2類
#writer= tf.python_io.TFRecordWriter("mask_and_nomask_test.tfrecords") #要生成的檔案
writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords") #要生成的檔案
for index,name in enumerate(classes):
class_path=cwd+name+'/'
for img_name in os.listdir(class_path):
img_path=class_path+img_name #每一個圖片的地址
img=Image.open(img_path)
img= img.resize((128,128))
print(np.shape(img))
img_raw=img.tobytes()
example = tf.train.Example(features=tf.train.Features(feature={
"label": tf.train.Feature(int64_list=tf.train.Int64List(value=https://bbs.csdn.net/topics/[index])),
'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=https://bbs.csdn.net/topics/[img_raw]))
}))
writer.write(example.SerializeToString())
writer.close()
報錯如下
writer.write(example.SerializeToString()) #序列化為字串
AttributeError: 'str' object has no attribute 'write'
謝謝各位大佬
uj5u.com熱心網友回復:
writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords")你的writer是字串
uj5u.com熱心網友回復:
> writer.write(example.SerializeToString())> AttributeError: 'str' object has no attribute 'write'
說明你此處的writer.write中的writer是個str字串
> writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords") #要生成的檔案
那就說明你這句話 回傳的 writer的str
只能幫你到這里了。
至于為何回傳的是str字串,只能你自己分析了。
uj5u.com熱心網友回復:
是不是writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords")應該寫writer= tf.compat.v1.python_io.TFRecordWriter("mask_and_nomask_test.tfrecords")
中間多敲了=號
uj5u.com熱心網友回復:
如樓上所說,看起來是估計是你筆誤,多寫了個 =我當時還納悶呢:
為何你代碼寫成:
x=y=z
的形式,具體是啥意思呢。估計就是多了個=了。
uj5u.com熱心網友回復:
多寫了個等于號把:
writer= tf.compat.v1.python_io.TFRecordWriter("mask_and_nomask_test.tfrecords")寫成:
writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords")導致:
此處的writer不是,原本希望的TFRecordWriter()所回傳的變數,而只是一個普通的字串了
因為:
writer= tf.compat.v1.python_io.TFRecordWriter=("mask_and_nomask_test.tfrecords")等價于:
tf.compat.v1.python_io.TFRecordWriter = ("mask_and_nomask_test.tfrecords")
writer = ("mask_and_nomask_test.tfrecords")等價于:
tf.compat.v1.python_io.TFRecordWriter = "mask_and_nomask_test.tfrecords"
writer = "mask_and_nomask_test.tfrecords"
即,此時:writer變數只是個str字串
所以,此處報錯:
writer,這個str字串變數,沒有(TFRecordWriter才有的)write這個屬性
所以解決辦法是:
去掉,自己的筆誤,即去掉多寫的那個等于號=
writer= tf.compat.v1.python_io.TFRecordWriter("mask_and_nomask_test.tfrecords")即可。
其含義是:
tf.data.experimental.TFRecordWriter | TensorFlow Core v2.1.0
tf.io.TFRecordWriter | TensorFlow Core v2.1.0
呼叫了
* 函式:tf.compat.v1.python_io.TFRecordWriter
* 引數是:"mask_and_nomask_test.tfrecords"
回傳了對應的類TFRecordWriter,其才有write函式
后續的
writer.write(xxx)
才能正常呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/92320.html
上一篇:ckeditor樣式無法顯示??
