mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...
1、什么是生成器
我們可以把生成器理解為一個高端的列表。生成器就是一個集算法和列表還有依次讀取于一體的功能。因為如果列表存儲的內容過多就會造成內存的浪費。但是如果“列表”內的元素可以通過某種規則展示出來、且我們只需要前幾項的元素,我們就可以通過使用生成器來進行。
2、生成器怎么用
# 列表的用法 a = [x for x in range(10)] =>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 生成器的用法 a = (x for x in range(10)) =><generator object <genexpr> at 0x0000027656609408>我們輸出的是一個generator。而列表打印的出來的就是元素。我們如何將generator的元素打印出來呢?使用next函數,將generator的元素打印出來。
next(b) =>0 next(b) =>1 next(b) =>2 next(b) =>3 next(b) =>4 next(b) =>5 ........ #當元素超出時報錯停止 next(b) =>Traceback (most recent call last):File "<stdin>", line 1, in <module> StopIteration對于這種情況,我們不必一直使用next對其進行調用,我們可以使用使用for循環對其進行調用,這樣就可以省去很多事情,便于操作。
這是一種簡單的用法,下面我們將函數信息與生成器結合使用。其大致使用方法跟一般的函數(循環)的使用。
#使用generator達到生成器的效果 def fid(max):n, a, b = 0, 0 ,1while n < max:yield ba , b = b , a + bn += 1 f = fid(6) =><generator object fid at 0x00000201278195E8> next(f) =>1 next(f) =>1 next(f) =>2 next(f) =>3我們可以看出yield的效果和return的效果差不都,但是yield不會使函數值返回,而是使得函數的值暫時掛起。我們使用next使得函數的值輸出,這極大的提高了我們的效率。
3、生成器在深度學習中的應用
def xs_gen_pro(data,batch_size):lists = datanum_batch = math.ceil(len(lists) / batch_size) # 確定每輪有多少個batchfor i in range(num_batch):if(i==0):np.random.shuffle(lists)batch_list = lists[i * batch_size : i * batch_size + batch_size]np.random.shuffle(batch_list)batch_x = np.array([x for x in batch_list[:,0]])batch_y = np.array([y for y in batch_list[:,1]])yield batch_x, batch_y ? if __name__ == "__main__":#data_gen = xs_gen(data,5)for x,y in xs_gen(data,5):print("item",x,y)for x,y in xs_gen(data,5):print("item",x,y)為了方便演示,上面是直接對列表進行讀入操作,一般在用的時候是讀取path列表,在按照path提取數據。
item [50 30 20 90 80] [5 3 2 9 8] item [ 60 0 100 110 40] [ 6 0 10 11 4] item [120 10 140 130 150] [12 1 14 13 15] item [70] [7] item [120 90 70 80 130] [12 9 7 8 13] item [ 10 150 100 0 50] [ 1 15 10 0 5] item [140 30 60 20 110] [14 3 6 2 11] item [40] [4]這樣就可以很好的讀取到數據了。
4、再看生成器
前面已經對生成器有了感性的認識,我們以生成器函數為例,再來深入探討一下Python的生成器:
1、語法上和函數類似:生成器函數和常規函數幾乎是一樣的。它們都是使用def語句進行定義,差別在于,生成器使用yield語句返回一個值,而常規函數使用return語句返回一個值。
2、自動實現迭代器協議:對于生成器,Python會自動實現迭代器協議,以便應用到迭代背景中(如for循環,sum函數)。由于生成器自動實現了迭代器協議,所以,我們可以調用它的next方法,并且,在沒有值可以返回的時候,生成器自動產生StopIteration異常。
3、狀態掛起:生成器使用yield語句返回一個值。yield語句掛起該生成器函數的狀態,保留足夠的信息,以便之后從它離開的地方繼續執行。
5、使用生成器所需的注意事項
我們通過對上面的輸出進行分析可以得出,我們可以知道,輸出僅有一次。因此我們使用生成器時需要注意的是:生成器只能遍歷一次。
6、參考
賴明星——《python生成器到底有什么優點?》
小宋是呢——《[開發技巧]·深度學習使用生成器加速數據讀取與訓練簡明教(TensorFlow,pytorch,keras)》
總結
以上是生活随笔為你收集整理的mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.6库参考手册_pytho
- 下一篇: python增删改查csv文件_【练习】