執行緒佇列與IO操作(三)

2021-09-01 12:37:26 字數 1587 閱讀 9938

記錄,成為更好的自己

影象基本知識

如何用張量來表達?

指定3-d張量:[height,weight,channels]。如:[200,200,3]:200長200寬3通道。

每乙個樣本必須保持特徵值數量一樣。

影象讀取api

影象讀取器

影象解碼器

讀取**

def picread(filelist):

"""讀取狗並轉換成張量

:param filelist: 檔案路徑+名字的列表

:return:每張的張量

"""# 1. 構造檔案佇列

file_queue = tf.train.string_input_producer(filelist)

# 2. 構造閱讀器

reader = tf.wholefilereader()

key, value = reader.read(file_queue)

print(value)

# 3. 構造解碼器,對讀取的進行解碼

image = tf.image.decode_jpeg(value)

print(image)

# 4. 處理的大小(統一大小)

image_resize = tf.image.resize_images(image,[200,200])

print(image_resize)

# 注意:一定要把樣本的形狀固定,在批處理的時候要求所有資料形狀必須定義

image_resize.set_shape([200,200,3])

print(image_resize)

# 5. 進行批處理

image_batch = tf.train.batch([image_resize], batch_size=10,num_threads=1, capacity=10)

print(image_batch)

return image_batch

# 讀取

if __name__=="__main__":

# 1. 找到檔案,放入列表

file_name = os.listdir("./data/dog")

filelist = [os.path.join("./data/dog",file) for file in file_name]

# print(file_name)

image_batch = picread(filelist)

# 開啟會話

with tf.session() as sess:

# 開啟執行緒協調器

coord = tf.train.coordinator()

# 開啟讀取檔案的執行緒

threads = tf.train.start_queue_runners(sess, coord=coord)

# 列印讀取內容

print(sess.run([image_batch]))

# **子執行緒

coord.request_stop()

coord.join(threads)

執行緒佇列與IO操作(一)

記錄,成為更好的自己 io操作相對於cpu的計算來說,速度較慢。現在要讀2g的檔案,一次性讀取資料,消耗記憶體。一次性進行訓練。關鍵的問題在於速度慢,訓練的模型都在等資料輸入到模型中。佇列與佇列管理器 tensorflow佇列 在訓練樣本的時候,希望讀入的訓練樣本時讀取的資料是有序的 完成乙個出佇列...

Tensorflow 順序佇列與IO操作

cpu負責tensorflow的計算,io負責讀取檔案 由於速度上的差異,通常做法是 主線程進行模型訓練,子執行緒讀取資料,二者通過佇列進行資料傳輸 相當於主線程從佇列讀資料,子程序往佇列放資料 在使用tensorflow進行非同步計算時,佇列是一種強大的機制。乙個簡單的例子。先建立乙個 先入先出 ...

多執行緒下的IO操作

今天考慮優化專案中檔案操作,專案中有許多批量刪除檔案的操作,當檔案很多時,刪除操作會比較費時 1s 2s的時間也顯得有點慢了 更何況10s以上,想要通過多執行緒來同時處理多個檔案的刪除,在程式中使用了threadpool和parallel想要加速刪除,但是效果並沒有預期的明顯,總耗時甚至還有所提公升...