いよいよ機械学習が始まりました!!
もちろん機械学習にはtensorflow + gpuが必要です(ただし、/(ㄒoㄒ)/ ~~はありません)
tensorflow + cpuの学習の基本は問題ないはずです
以前、ウーエンダのビデオを直接見ましたが、アルゴリズムの原理を理解した後、まったく実現することが不可能であることに気付きました...そして、tfの関数の機能を理解できませんでした。
今回は体系的に再検討していきます
tf 2に基づく機械学習を長時間行うためのリソースを探していますが、tf 1.0を使用するには古すぎないものもあります。pptを読んでください。
最後に、このビデオが最も詳細だと思います
https://www.bilibili.com/video/BV1ua4y1t7Ws?
彼は実際の戦闘例を段階的に手動で実装し、tf関数を使用して単純化し、原理と実装をよりよく理解しています。
次のテキスト:
実際、tfとnumpyは基本的な機能が似ていますが、tf 2を使用すると、numpyとの互換性も向上します
tf.zeros(shape、dtype = tf.float32)全0
tf.zeros_like(x)は、xのディムから直接0行列を作成します<==> tf.zeros(x.shape)
tf.ones(shape、dtpye = tf.float32)全1
tf.ones(x) はスカラーを作成します| dim = 0
tf.ones([]) は、値xの1 * 1ベクトルを作成します
tf.ones([x]) create vector shape = x
tf.math.log:底がeの対数関数
tf.exp:指数関数
tf.uniform(shape、minval、maxval、dtpye)均一に変化する配列
tf.random.normal(形状、平均(平均デフォルト0)、標準偏差(分散デフォルト1))
tf.fill(dim、value)フィル番号
上記はnumpyと同じです
tf.gather(a、axis、idx)軸は軸を指定でき、この軸はaのデータをこのリストのidxの順序で受け取ります
a.shape = [4,28,28,1] idx = [1,28,28,4]
a.shape = [1,28,28 ,, 4]は、a ==> [1、x]をidxに変更することと同じです。
tf.constant(値、形状)塗りつぶし数
x.ndimは次元を返します
xxx = tf.covert_to_tensor(name、dtype)numpyをテンソルタイプに変換
x.numpy()からnumpy
tf.is_tensor(x)xがテンソル型かどうかを判別
tf.random.shuffle(x)x配列をランダムにシャッフルします
tf.reshape(xx、shape)はxテンソルを形状に変換します
tf.reshape(xx、[-1、xxx])-1は、この次元のすべてを表します
たとえば、mnistデータ、バッチ= 128の場合、最後のグループは[128,28,28,1]を満たすことができません
その後、tf.reshape(x、[-1,28,28,1])はエラーを報告しません
tf.expand_dim(xx、axis)xxテンソルは軸の次元を増やします(軸は0から始まります)
tf.transpose(a、ベクトル([x1、x2、x3、x4]など))は
、元の画像を変換することと同じです。たとえば、元の画像
は[n、h、w、c]です。vector = [0,3,2,1]
==> [n、c、w、h]これにより、コンテンツが「本質」を変更しないようになります
tf.one_hot(x、depth)はxを1_depth one_hotベクトルに変換します
tf.concat([x1、x2、xn]、axis)xiはテンソルであり、axisはテンソルがスプライスされる軸を表します
たとえば、軸= 0、[[x1]、[x2]]、軸= 1、[[x1、x2]]
tf.squeeze(x、axis)軸を削除
tf.split(xx、list、axis)は、軸とリストに従ってxxテンソルを他のテンソルに分割します
たとえば、axis = 0、xx = [[x1]、[x2]、[x3]、[x4]]、list = [1:2:1]
出力:[x1] [[x2]、[x3]] [x4 ]
リストが数値の場合、リストテンソルに分割されます
一般的な機械学習では、次元にはすべて「意味」があります。
dim = 3
文:いくつかの文があり、各文にはいくつかの単語があり、各単語は次のように見なされる次元ベクトルの数
[num、len、vector_dim]
dim = 4
写真:写真の数、各写真のサイズ(h、w)、いくつかのチャネルがあります
[数値、高さ、重量、チャネル]
dim = 5 |わからない...
つまり、タスク全体を複数のタスクに分割して同時に処理し、その都度の処理数を最初の次元とする
[バッチ、num、h、w、rgb]
放送:
これは、特に呼び出す必要がない最適化方法です
簡単に言えば、2つの操作の寸法を自動的に一致させます
例:[3,4,5,7] + [3]
<==> [3,4,5,7] + [3,1,1,1]は、ディメンション1が自動的に追加されない場合、同じディメンションであるかどうかにかかわらず、右から左に一致します
<==> [3,4,5,7] + [3,4,5,7]は、すべて1を高次元の等しい次元に変換します
[3、4、5、6] + [1、4、5、1]
<==> [3、4、5、6]
はるかに便利