日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(8)TensorFlow基础操作四: 维度变换

發(fā)布時間:2023/12/15 pytorch 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(8)TensorFlow基础操作四: 维度变换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

深度學(xué)習(xí)(8)TensorFlow基礎(chǔ)操作四: 維度變換

  • 1. View
  • 2. 示例
  • 3. Reshape操作可能會導(dǎo)致潛在的bug
  • 4. tf.transpose
  • 5. Squeeze VS Expand_dims
    • (1) Expand dim(增加維度)
    • (2) Squeeze dim(減少維度)

Outline

  • shape,ndim
  • reshape
  • expand_dims/squeeze
  • transpose
  • broadcast_to

1. View

設(shè)[b, h, w]為一個content;
(1) View1: [b, 28, 28]
保存一個batch中的每一張圖片,其中每張圖片有28行28列,和content的理解是完全一致的;

(2) View2: [b, 28*28]
直接考慮圖片的數(shù)據(jù),而不會考慮行和列的數(shù)據(jù),也就是說只記錄了圖片而沒有記錄行和列的數(shù)據(jù);


(3) View3: [b, 2, 14*28]
將圖片分為上下兩部分,也就是說只有上半部分和下半部分這兩個概念,至于上半部分或者下半部分有多少行多少列是不知道的;

(4) View4: [b, 28, 28, 1]
增加了channel(通道)屬性,也就是RGB的概念;

2. 示例

(1) tf.reshape(a, [4, 784, 3]): 將a轉(zhuǎn)換為[4, 28×28, 3]的維度,可以理解為[b, pixel, c];
(2) tf.reshape(a, [4, -1, 3]): 與tf.reshape(a, [4, 784, 3])作用一樣,只不過如果不想計算28×28的話可以用-1來代替;
(3) tf.reshape(a, [4, 784*3]): 可以理解我每張圖片都是由7843的像素點(diǎn)組成的Vector,這里不但將行和列的信息抹掉了,還將channel的信息抹掉了,只通過[4, 7843]這個數(shù)據(jù)是無法恢復(fù)原數(shù)據(jù)信息的;
(4) tf.reshape(a, [4, -1]): 與tf.reshape(a, [4, 784*3])作用一樣;

  • Reshape is flexible

(5) tf.reshape(tf.reshape(a, [4, -1]), [4, 28, 28, 3]): 將[4, 28, 28, 3]變?yōu)閇4, -1]再恢復(fù)為[4, 28, 28, 3];

3. Reshape操作可能會導(dǎo)致潛在的bug

  • images: [4, 28, 28, 3]
    • [b, h, w, 3]
  • reshape to: [4, 784, 3]
    • [b, pixel, 3]

注: 需要記住正確的content才能恢復(fù)到原來的view,content就是height和weight的維度以及height和weight的順序;

  • 正確的content: height: 28, width: 28
    [4, 784, 3] →\to [4, 28, 28, 3]
  • 錯誤的content: height: 14, width: 56
    [4, 784, 3] →\to [4, 14, 56, 3]
    這就導(dǎo)致恢復(fù)后的圖片是錯誤的;
  • 錯誤的content: width: 28, height: 28
    [4, 784, 3] →\to [4, 28, 28, 3]
    這種錯誤更難被察覺到,恢復(fù)后的圖片依然是錯誤的;

4. tf.transpose

有些時候我們需要將圖片進(jìn)行旋轉(zhuǎn)操作,這時就需要tf.transpose()方法對content進(jìn)行變換:

(1) tf.transpose(a): 將a進(jìn)行轉(zhuǎn)置,轉(zhuǎn)置后的content順序?yàn)閇1, 2, 3, 4];
(2) tf.transpose(a, perm=[0, 1, 3, 2]),將content按照perm=[0, 1, 3, 2]進(jìn)行變換,變換后的content順序?yàn)閇4, 3, 1, 2];

(3) tf.transpose(a, [0, 3, 2, 1]): 將content順序按照[0, 3, 2, 1]變換為[4, 3, 28, 28],也就是[b, c, w, h];

5. Squeeze VS Expand_dims

(1) Expand dim(增加維度)

  • a: [classes, students, subjects]
    • [4, 35, 8]
  • add school dim(dim=axis)
  • [1, 4, 35, 8] + [1, 4, 35, 8]
    • →\to [2, 4, 35, 8]

  • tf.expand_dims(a, axis=0): 在第0維處增加一個維度;
  • tf.expand_dims(a, axis=0): 在第3維處增加一個維度;

  • tf.expand_dims(a, axis=-1): 在第-1維,也就是倒數(shù)第1維(最后1維)處增加一個維度;
  • tf.expand_dims(a, axis=-4): 在-4維處,也就是倒數(shù)第4維(開頭處)處增加一個維度;

(2) Squeeze dim(減少維度)

  • 只能針對dim=1的維度進(jìn)行減少維度的操作
    • [4, 35, 8, 1]
    • [1, 4, 35, 8]
    • [1, 4, 35, 1]

  • tf.squeeze(tf.zeros([1, 2, 1, 1, 3])): 去掉dim=1的所有維度;
  • tf.squeeze(a, axis=0): 將第1個維度去掉;
  • tf.squeeze(a, axis=2): 將第3個維度去掉;
  • tf.squeeze(a, axis=-2): 將倒數(shù)第2個維度去掉;
  • tf.squeeze(a, axis=-4): 將倒數(shù)第4個維度去掉;

參考文獻(xiàn):
[1] 龍良曲:《深度學(xué)習(xí)與TensorFlow2入門實(shí)戰(zhàn)》

總結(jié)

以上是生活随笔為你收集整理的深度学习(8)TensorFlow基础操作四: 维度变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。