Pythonアルゴリズムインタビューの質問.

これらは、私が何年も前に技術面接担当者として収集したインタビューの質問です. Python の基本-機械学習-NLP-CV-深層学習フレームワーク-Linux-yolo からいくつかの質問があります。さまざまな方向の候補者に、質問の対応する方向を尋ねます。
基本的には取材用の定型文で、集めて記録し、今後に活かしていきます。

面接の質問

Python の基本:

1. 1 行のコードで 1 ~ 100 の合計を実現

2. python の GIL について話しましょう.
GIL は python のグローバル インタープリター ロックです. 同じプロセスで複数のスレッドが実行されている場合、python プログラムを実行すると、1 つのスレッドが python インタープリターを占有します (ロックを追加するのが GIL です)。プロセス内のスレッドは実行できず、スレッドの実行が終了するまで他のスレッドは実行できません。スレッドの実行中に時間のかかる操作が発生すると、インタープリター ロックが解除され、他のスレッドを実行できるようになります。したがって、マルチスレッドでは、スレッドの実行は、同時にではなく順次実行されます。
マルチプロセスでは、システムが各プロセスにリソースを割り当てることができるため、プロセスごとに Python インタープリターを持っているのと同等であるため、マルチプロセスは複数プロセスの同時動作を実現できますが、プロセス システムのリソースのオーバーヘッドが大きくなるという欠点があります。は大きい

3. デコレータを使用できる言語の種類を 1 文で説明してください?
関数はパラメーターとして渡すことができ、デコレータを使用できます。

4. ファイルを開いて処理する with メソッドについて簡単に説明してください。
ファイルを読み書きする際に何らかの異常が発生することがあります. 従来の f.open の
書き方に従うと, try, except, finally で異常判定を行います. f .close() はファイルを閉じます。 with メソッドは f.close を最終的に実現するのに役立ちます
(もちろん、他にもカスタム関数があります。興味があれば、with メソッドのソース コードを調べることができます)。

5. Pythonにおけるコピーとディープコピーの違い
1. イミュータブルなデータ型のコピーは、コピーでもディープコピーでも同じアドレス. シャローコピーの値がイミュータブルオブジェクト(値、文字列、 = "割り当て" の場合
、オブジェクトの id 値は、浅いコピーの元の値と同じです. 2.コピーされた値は、変更可能な
オブジェクト (リストと辞書) です.は複雑なサブオブジェクト (たとえば、リスト内のサブ要素がリスト) の場合、元の値の複雑なサブオブジェクトの値を変更すると、浅いコピーの値に影響します. ディープ コピー ディープコピー: 完全にコピーに依存せず、内部のリストと辞書を含む



6. [i for i in range(3)] をジェネレータに変更してください

9. 静的メソッドとクラス メソッドの違いは何ですか?
Python クラスは単なる構文糖衣です。関数をクラス内に書くこととクラスの外に書くことに違いはありません. 唯一の違いはパラメータです. いわゆるインスタンスメソッドは最初のパラメータがselfであることを意味し, いわゆるクラスメソッドは最初のパラメータがパラメーターはクラスですが、静的メソッドには追加のパラメーターは必要ありません. であるため、区別する必要があります。

1. オブジェクト指向の 3 つの主要な特徴を簡単に説明してください。
カプセル化: カプセル化とは、一連のデータ属性とメソッド データをオブジェクトであるコンテナーに入れることを指します。オブジェクトに "." を使用して、オブジェクト内のデータ属性とメソッド属性を呼び出します。
継承: 継承とは、サブクラスが親クラスのデータ属性とメソッド属性を継承し、それらを変更または使用できることを意味します。
ポリモーフィズム: Python のポリモーフィズムとは、類似したデータ属性とメソッド属性を持つ複数のクラスの命名規則を統一することを指し、開発者のコ​​ードの統一性を向上させ、呼び出し元が理解しやすくすることができます。

Python 機械学習:

1. 教師あり学習と教師なし学習の違いは何ですか?
教師あり学習: ラベル付けされたトレーニング サンプルから学習して、可能な限りトレーニング サンプル セット外のデータを分類および予測します。(LR、SVM、BP、RF、GBDT)
教師なし学習: これらのサンプルで構造的知識を発見するよりも、ラベルのないサンプルでのトレーニングと学習。(KMeans,DL)

4. 線形分類器と非線形分類器の違いと長所と短所
モデルがパラメーターの線形関数であり、線形分類面がある場合、それは線形分類器であり、そうでない場合はそうではありません。
一般的な線形分類器には、LR、ベイジアン分類、単層パーセプトロン、線形回帰があります
一般的な非線形分類器: 決定木、RF、GBDT、多層パーセプトロン
SVM (線形カーネルまたはガウス カーネルを参照)
線形分類器は高速でプログラミングが簡単です。
非線形分類器はプログラムが複雑ですが、強力な効果フィッティング能力があります

5. 一部の機械学習モデルでデータを正規化する必要があるのはなぜですか?
正規化とは、(特定のアルゴリズムを使用して) 処理する必要があるデータを、必要な特定の範囲に制限することです。

1) 正規化後、最適解を求める勾配降下の速度が加速されます。等高線はより滑らかになり、勾配降下法を解くときに収束が速くなります。正規化を行わないと、勾配降下プロセスがジグザグに進みやすくなり、収束が困難になるか、収束できなくなることさえあります

2) 有次元式を無次元式に変更すると、精度が向上する場合があります。一部の分類器では、サンプル間の距離 (ユークリッド距離など) を計算する必要があります (KNN など)。フィーチャの値の範囲が非常に大きい場合、距離の計算は主にこのフィーチャに依存し、実際の状況に反します (たとえば、実際の状況では、値の範囲が小さいフィーチャの方が現時点ではより重要です。ロジスティック回帰などのモデルは、データが
正の状態分布に従うことを前提としています。

7. 正規化する必要のない機械学習アルゴリズムは?
確率モデルは、変数の値を気にしないため、正規化を必要としませんが、変数の分布と、決定木 rf などの変数間の条件付き確率を気にします。また、adaboost、gbdt、xgboost、svm、lr、KNN、KMeans などの最適化問題には、正規化が必要です。

8. 標準化と正規化の違い
簡単に言えば、標準化とは、特徴行列の列に従ってデータを処理することであり、z スコア法を計算することにより、サンプルの固有値を同じ次元に変換します。正規化とは、特徴行列の行に従ってデータを処理することです. その目的は、ポイント乗算または他のカーネル関数の類似度を計算するときに、サンプルベクトルが統一された基準を持つことです, つまり、それらはすべて「単位に変換されます.ベクトル」。

15. 勾配ブースティング アルゴリズム (GBM) とランダム フォレストはどちらもツリー ベースのアルゴリズムですが、両者の違いは何ですか?
最も根本的な違いは、ランダム フォレスト アルゴリズムがバギング テクノロジを使用して予測を行うのに対し、GBM はブースティング テクノロジを使用して予測を行うことです。バギング手法では、データ セットはランダム サンプリングによって n 個のサンプルに分割されます。次に、単一の学習アルゴリズムを使用して、すべてのサンプルをモデル化します。結果の予測は、投票または平均化を使用して結合されます。バギングは並行して実行され、ブースティングは予測の最初のラウンドの後に行われます. アルゴリズムは、誤分類された予測の重みを増やして、後続のラウンドで修正できるようにします. 誤分類された予測に高い重みを与えるこの一連のプロセスは、停止基準に達するまで続きます。ランダム フォレストは、分散を減らすことによってモデルの精度を向上させます (主な方法)。分散の削減を最大化するために、スパニング ツリーは無相関です。一方、GBM はモデルのバイアスと分散を減らしながら精度を向上させます。

NLP面接の質問.

6:CRFとHMMの違い
1.HMMモデルには隠れ馬仮定があるが、CRFは存在しないため、HMMの計算速度はCRFモデルよりも格段に速く、場合によっては適している
2. また、予測問題の隠れシーケンス ユニットが前のユニットに関連しているだけではない場合、HMM の精度が大幅に低下するという隠れ Ma 仮説のために、CRF はこれによって制限されませんであり、精度は HMM よりも大幅に高くなっています。

7: CRFはどのようにトレーニングされるのか?損失関数とは?
(1) CRFレイヤーはトレーニングデータから制限的なルールを取得できる.
(2) CRFレイヤーは最終的な予測ラベルにいくつかの制約を追加して、予測の正当性を保証できる.
ラベル トレーニング データのトレーニングの過程で、これらの制約は CRF レイヤーによって自動的に学習されるため、ラベル シーケンスの予測に不正なシーケンスが現れる可能性が大幅に減少します。
損失関数:
CRF 損失関数は、実際のパス スコアとすべての可能なパスの合計スコアで構成されます。
(1) 入力シーケンス X に対応する出力タグ シーケンス y について、次のようにスコアを定義します (基本的に、起動確率と遷移確率の累積和) (2) ソフトマックス関数を使用して、各正しいタグの確率値を定義し
ますシーケンス y, 実際のトレーニングでは、尤度確率 p(y|X) を最大化するだけでよく、対数尤度は具体的には次のように使用されます (3) 実際のパスは、すべての可能なパスの中で最高のスコアを持ちます
トレーニング プロセス中、モデルのパラメータ値は何度も更新され、真のパスの部分的なパーセンテージが増加し続けます。

6:CRFとHMMの違い
1.HMMモデルには隠れ馬仮定があるが、CRFは存在しないため、HMMの計算速度はCRFモデルよりも格段に速く、場合によっては適している
2. また、予測問題の隠れシーケンス ユニットが前のユニットに関連しているだけではない場合、HMM の精度が大幅に低下するという隠れ Ma 仮説のために、CRF はこれによって制限されませんであり、精度は HMM よりも大幅に高くなっています。


5: batch_size パラメータはモデルのトレーニング効果にどのように影響しますか? 収束速度? オーバーフィッティング? 対応する問題をどのように解決しましたか? どのような方法を使用しましたか? ただし、batch_size が大きすぎると汎化能力が低下し、一定の範囲内でバッチ サイズを大きくすると収束が安定しますが、バッチ サイズが大きくなるとモデルのパフォーマンスが低下し、収束速度が遅くなります。トレーニング ステップ数への影響により、batch_size が小さいとモデルの反復回数が増加し、事前にフィッティング ポイントに到達しますが、エポックは終わっておらず、トレーニング データの学習を継続すると、元のデータへのオーバーフィッティングが容易に発生します。 .
解決策: BN 層、ドロップアウトを追加し、勾配降下の最適化方法を置き換えます

4: ReLU は sigmoid よりも優れていると言い続けてきましたが、ReLU の何が問題なのか教えていただけますか? 数学の本質を深く掘り下げて説明してください. Answer: ReLU は sigmoid よりも優れていますが、ReLU にも必然的な問題があります
。 、「ReLUデッドゾーン」として知られる問題があります。トレーニング中に一部のニューロンが「死ぬ」、つまり、0以外の出力を停止します。場合によっては、特に大きな学習率を使用している場合に、ネットワークのニューロンの半分が死んでいることに気付くかもしれません。トレーニング中にニューロンの重みが更新され、ニューロンの入力の重み付き合計が負になると、ニューロンは 0 を出力し始めます。こうなると、入力が負のときReLU関数の勾配は0なので、ニューロンは0しか出力できません。

3: Bert の Attention と seq2seq の Attention の違いを説明してください?
Answer: Bert の基盤は Transformer に由来するため、その Attention メカニズムはマルチヘッド Attention メカニズムであり、従来の RNN やその他のモデルよりも効率的で、並列処理が可能です長距離のセマンティックと構造の依存関係を同時にキャプチャ. 抽出された機能もより豊富であり、seq2seq の注目のエンコーダー側のすべての情報は、固定長のセマンティック ベクトルに圧縮され、この固定ベクトルは表現に使用されますエンコーダー側のすべての情報. . これは情報の損失を引き起こすだけでなく、デコード時にデコーダーがより重要な情報に集中するのを妨げ、問題を並行して処理できません.

2: なぜバートは複数の意味を持つ単語を解けるのですか? どうすれば解けるのでしょうか?
回答: 同じ単語がバートの入力に変換されています. 埋め込みベクトルは同じですが, 多層トランスフォーマエンコーダを通過した後,バート、注意が異なります.異なる文のコンテキストは、異なる文がバートに入力された後、同じ単語によって異なる単語ベクトルが出力されることにつながり、多義性の問題を解決します.

(1) ドロップアウトを導入すると、オーバーフィッティングを防ぐことができる理由

6. 2 つの単語ベクトル間の距離を計算するために使用できる手法は次のうちどれですか?
B. ユークリッド距離
C. コサイン類似度

56. NLP のストップ ワードとは?
文に現れる一般的な単語は文に重みを加え、ストップ ワードと呼ばれます。これらのストップ ワードはブリッジとして機能し、文が文法的に正しいことを保証します。簡単に言えば、自然言語データを処理する前にフィルターで除外される単語はストップ ワードと呼ばれ、一般的な前処理方法です。

59. テキストデータを処理する場合、CNN よりも RNN の特徴は何ですか?
従来のテキスト処理タスクの方法では、一般に TF-IDF ベクトルを特徴入力として使用しますが、実際には入力テキスト シリーズの各単語の順序が失われます。
通常、CNN は固定長のベクトルを入力として受け取り、スライディング ウィンドウとプーリング方式を使用して、元の入力を固定長のベクトル表現に変換します。そうすることで、テキスト内の局所的な特徴を捉えることができますが、2 つの単語間の長距離の依存関係を学習するのは困難です。

RNN能够很好处理文本数据变长并且有序的输入序列。将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力。
在文本分类任务中,激活函数f可以选取Tanh或ReLU函数,g可以采用Softmax函数。
通过不断最小化损失误差(即输出的y与真实类别之间的距离),可以不断训练网络,使得得到的循环神经网络可以准确预测文本类别。相比于CNN,RNN由于具备对序列信息的刻画能力,往往能得到更加准确的结果。

60. RNN に勾配消失または勾配爆発があるのはなぜですか? どのような改善点がありますか?
RNN の解は BPTT (Back Propagation Through Time) アルゴリズムによって実現できます。実際には BP の単純な変形です。RNN 設計の本来の意図は, 遠距離入力間の依存関係をキャプチャすることです. しかし, BPTT を使用するアルゴリズムは遠距離依存関係をうまくキャプチャできません. この現象は, 深層ニューラル ネットワークの勾配消失問題に起因します.

由于预测误差沿神经网络每一层反向传播,当雅克比矩阵最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸。反之若最大特征值小于1,梯度大小会指数减小,产生梯度消失。梯度消失意味着无法通过加深网络层数来提升预测效果,只有靠近输出的几层才真正起到学习的作用,这样RNN很难学习到输入序列中的长距离依赖关系。


梯度爆炸可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值的时候,对梯度进行等比缩放。而梯度消失问题需要对模型本身进行改进。深度残差网络是对前馈神经网络的改进。通过残差学习的方式缓解了梯度消失的现象,从而可以学习到更深层的网络表示。对于RNN来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上缓解了梯度消失带来的损失。

在CNN中采用ReLU激活函数可以有效改进梯度消失,取得更好收敛速度和收敛结果,

64.一般的な確率的グラフィカルモデルの中で、生成モデルと識別モデルはどれですか?

首先需要弄清楚生成式模型与判别式模型的区别。
假设可观测的变量集合为X,需要预测的变量集合为Y,其他的变量集合为Z。生成式模式是对联合概率分布P(X,Y,Z)P(X,Y,Z)P(X,Y,Z)进行建模,在给定观测集合X的条件下,通过计算边缘分布来求得对变量集合Y的推断。

判别式模型是直接对条件概率分布P(Y,Z∣X)P(Y,Z|X)P(Y,Z∣X)进行建模,然后消掉无关变量Z就可以得到对变量集合Y的预测,即常见的概率图模型由朴素贝叶斯、最大熵模型、贝叶斯网络、隐马尔可夫模型、条件随机场、pLSA、LDA等。

其中朴素贝叶斯、贝叶斯网络、pLSA、LDA属于生成式。
最大熵模型属于判别式。
隐马尔可夫模型、条件随机场是对序列数据进行建模的方法,其中隐马尔可夫属于生成式,条件随机场属于判别式

履歴書インタビューの質問.

3. ニューラル ネットワークは生成モデルですか、それとも識別モデルですか?
判別モデル、直接出力カテゴリ ラベル、または出力クラス事後確率 p(y|x)

5. モデル圧縮の主な方法は何ですか?
(1) モデル構造に関しては、モデルの枝刈り、モデルの蒸留、NAS 自動学習モデルの構造などに分けられます。
(2) モデルパラメータの定量化には、FP16 などへの数値精度の量子化が含まれます。
注: モデル プルーニングの多くの例は、軽量ネットワーク (ネットワークの最後で計算集約型のレイヤーを変更する mobilenet v3 のグループ conv など) に表示されます。深さごとに分離可能な畳み込みなど
モデル蒸留は転移学習です。
パラメータの量は mobilenet v3 にも反映されており、ネットワーク ヘッドでの畳み込みカーネルの数が削減されています。

11. ドロップアウトの原理は、なぜオーバーフィッティングを防ぐことができるのですか?
ドロップアウトの原理は、ネットワークが順方向に伝播しているときにニューロンの活性化値が一定の確率でゼロになるようにすることであり、モデルの汎化性能をより強力にすることができます。

前向:训练时,利用伯努利分布,随机选出一个只包含0,1的mask矩阵,然后用这个mask矩阵去对应乘上每个输入得到的就是Dropout后的结果,再除以(1-p);测试的时候不用Dropout
反向:训练时根据mask来求对应的梯度,测试时无Dropout

dropout为什么可以防止过拟合呢?
1、dropout其实相当于我们日常用到的基于平均的ensemble,ensemble有两种方式,基于平均的ensemble和投票的ensemble。对于网络中的部分神经元进行概率暂时舍弃,这样相当于训练了多个网络。
2、dropout还取消了神经元之间的共适应关系,使得网络的输出不依赖于网络中的某些隐含节点的固定作用,使模型的鲁棒性更好。
3、类似于生物进化的角色,环境的变化不会对物种造成毁灭性的影响。

15. データ強化の方法を簡単に説明すると、
主にオフライン強化とオンライン強化の方法に分けられます。
オフライン拡張とは、データセットがローカルで処理されることを意味します。
オンライン強化: 反転 (水平、垂直)、回転、拡大縮小、トリミング、変換、ノイズの追加など。

17. 畳み込み、プーリング、全結合層などの操作を理解する方法
畳み込みの役割: フィルターに相当し、画像のさまざまな特徴を抽出し、
feature_map 活性化関数の役割を生成します:
非線形因子を導入する役割プーリング: 1. 特徴の次元のサイズを縮小し、特徴をより制御しやすくし、パラメーターの数を減らしてオーバーフィッティングの程度を制御し、わずかに変換された画像に対するネットワークの堅牢性を高めます; 2. 変換を含む不変性を達成します。回転、スケール待ち。3. 勾配がまばらになり、情報が失われる原因となります. GAN ネットワークでは、通常、ステップ サイズを使用した畳み込みを使用して、プーリングの代わりにダウンサンプリングを実行します。
完全接続の役割: 抽出された特徴を分類して返す。

18. 1x1 サイズの畳み込みカーネルの機能.
畳み込みカーネルの数を制御することにより、次元を増減することができ、それによってモデル パラメーターを減らすことができます. さまざまな
機能に対して正規化操作 (BN) を実行し、非線形性を高めます ( relu)
異なるチャンネル用. 機能の融合

19. 一般的な活性化関数の特徴
活性化関数は、飽和活性化関数と不飽和活性化関数の 2 つに分類されます。
飽和活性化関数の代表はシグモイド、tanh です。特徴としては、収束が遅く、勾配消失が容易です。
不飽和活性化関数の特徴は、高速収束、勾配消失の抑制、オーバーフィッティングの抑制です。
シグモイド:計算量が多い。グラデーションが消え、元のデータ分布が変更されます。
tanh: 計算量が多く、sigmoid よりも勾配消失の方が優れている
relu: 計算が簡単で、勾配消失と勾配爆発を効果的に防ぎ、ニューロンが死にます。
leakrelu: ニューロン死の問題を解決しますが、
ELU という追加のパラメーターがあります: ニューロンの死を回避し、どこでも継続するため、SGD は高速化されますが、計算はより複雑になります。

23.機械学習でニュートン法の代わりに勾配降下法がよく使用されるのはなぜですか?
1. ニュートン法の目的関数は二次導関数であり、高次元の場合、行列が非常に大きくなり、計算と保存の両方が問題になります。
2. 小さいバッチの場合、ニュートン法ではノイズが多すぎます。
3. 非凸目的関数の場合、ニュートン法は鞍点や極大点に引き寄せられやすい。

32. SGD、Momentum、Adagard、Adam
まず、病的な湾曲の存在により、トレーニングが遅くなり、ローカル ミニマムの問題が発生します。そこで、次の最適化関数があります。
詳細については、私のブログ投稿を参照してください.
1. トレーニング プロセス中、SGD アルゴリズムは、誤ってマークされたラベル付きデータ、またはトレーニング用の通常のデータとは大きく異なるデータを選択する可能性が非常に高く、このデータを使用して勾配を取得します。の偏差が大きいため、トレーニング プロセス中に SGD に強いランダム現象が発生します。SGD は一度に 1 つの更新のみを実行し、冗長性はなく、新しいサンプルを追加できます。しかし、SGD の更新は重大なショックを引き起こす可能性があります。
したがって、ミニバッチ勾配降下があります。
2. 確率的勾配学習アルゴリズムでは、各ステップのステップ サイズが固定されていますが、運動量学習アルゴリズムでは、各ステップがどれだけ進むかは、現在の勾配の大きさだけでなく、過去の速度にも依存します。速度 v は、各ラウンドの累積トレーニング パラメーターの勾配です。運動量法は、SGD を加速して振動を抑制することができるため、勾配の方向が変化しない次元はより速く更新され、勾配の方向が変化する次元はより遅く更新され、収束を加速して振動を減らすことができますが、一定の事前知識が必要です。
3. 以前の確率的勾配アルゴリズムと運動量確率的勾配アルゴリズムは、グローバルな学習率を使用し、すべてのパラメーターが一定のペースで更新されます。AdaGrad は実際には非常に単純で、各次元のそれぞれの履歴勾配の 2 乗を合計し、更新時に履歴勾配値で除算するだけです。したがって、Adagrad は、頻度の低いパラメーターの更新が大きく、頻度の高いパラメーターの更新が少ないため、まばらなデータに対して適切に機能します。不利な点は、Adagrad の学習率が縮小し続け、最終的に非常に小さくなることです。
4. AdaGrad は理論的にはいくつかの優れた特性を持っていますが、実際にはあまりうまく機能しません. 基本的な理由は、トレーニング サイクルの増加に伴い学習率が急速に低下することです. RMSProp アルゴリズムは、AdaGrad に基づいて減衰係数を導入します。
5. 運動量は極小値方向の探索を加速するが、RMSProp は振動方向の探索を妨げる. Adam は彼の名前から、彼が運動量と RMSProp に基づいて微調整されたバージョンであることがわかります. この方法は現在の方法です.深層学習 で最も人気のある最適化手法。

データがまばらな場合は、Adagrad、Adam、RMSprop などの適応法を使用します。ほとんどの場合、Adam はより良い結果を達成できますが、より良い初期化条件では SGD の方が高速になる可能性があります。収束、最小点も見つかった。

ピトーインタビューの質問.

8. pytorch での train と eval の違いは何ですか
(1). model.train() -
トレーニング中に BatchNormalization と Dropout を有効にし、BatchNormalization と Dropout を True に設定します
(2). model.eval() - 検証とテスト有効、
BatchNormalization と Dropout が有効でない、BatchNormalization と Dropout が False に設定されている

train模式会计算梯度,eval模式不会计算梯度。

8. 使用する可視化ツール

9. GPU を使用してモデルをトレーニングする方法
GPU を使用してモデルを高速化するのは非常に簡単で、モデルとデータを GPU に移動するだけです。コア コードはほんの数行です
# モデルを定義します
...
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device) # モデルを移動しますcuda
# モデルを訓練する
...
features = features.to(device) # データを cuda に移動する
labels = labels.to(device) # または labels = labels.cuda() if torch.cuda.is_available() else labels

10. GPUの使用状況、ストレージの状態を確認する方法
nvidia-smi

11. マトリックス変換中の連結とスタックの違い。
numpy と同様に、concat メソッドと stack メソッドを使用して複数のテンソルをマージでき、tf.split メソッドを使用してテンソルを複数のテンソルに分割できます。

12. ニューラル ネットワークのトレーニング中に GPU の使用率が低い場合の対処方法。

75. pytorch の機能
1. DataLoader() によるデータ読み込み
2. 重みと bais の初期化
3. 最適化最適化法、学習率学習法
4. 損失関数 torch.nn.
5. Conv、pool、relu、dropout、FC など
6. 逆伝播 loss.backword
7. モデル torch.save を保存 モデル torch.load をロード

テンソルフローインタビューの質問.

tensorflow1.x と 2.x の違い

[外部リンクの画像転送に失敗しました。ソース サイトには盗難防止リンクのメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Re7Yh0oS-1675147990479)(…/AppData/Roaming/Typora/typora-user- images/image-20221024092557715.png )]

Autograph は TensorFlow2.0 の仕組みです。

	动态计算图运行效率相对较低。

@tf.function デコレータを使用して、通常の Python 関数を TensorFlow1.0 に対応した静的計算グラフ構築コードに変換できます。

TensorFlow1.0 では、計算グラフの使用は 2 つのステップに分かれており、最初のステップは計算グラフを定義するステップであり、2 番目のステップは計算グラフをセッションで実行するステップです。

TensorFlow2.0 では、Autograph 方式で計算グラフを使用する場合、計算グラフを定義する最初のステップが関数の定義になり、計算グラフを実行する 2 番目のステップが関数の呼び出しになります。

セッションを使用する必要はもうありません。すべてが元の Python 構文と同じくらい自然です。

実際には、通常、動的計算グラフを使用して最初にコードをデバッグし、次に @tf.function を使用して Autograph に切り替えて、パフォーマンスを改善する必要がある場合により高い効率を達成します。

tf.print() と print() の違いは何ですか

Autograph机制可以将动态图转换成静态计算图,兼收执行效率和编码效率之利。

もちろん、Autograph メカニズムが変換できるコードには制約がないわけではありません. 従う必要のあるコーディング標準がいくつかあります. そうしないと、変換が失敗したり、期待どおりにならない場合があります.

1. @tf.function で装飾された関数は、可能な限り Python の他の関数ではなく、TensorFlow の関数を使用する必要があります。たとえば、print の代わりに tf.print を使用し、range の代わりに tf.range を使用し、True の代わりに tf.constant(True) を使用します。

(説明: Python の関数は、実行関数を追跡して静的グラフを作成する段階でのみ使用されます。通常の Python 関数は、静的な計算グラフに埋め込むことができないため、計算グラフが構築された後に再度呼び出されると、これらの Python 関数が使用されます。計算されず、TensorFlow の関数は計算グラフに埋め込むことができます. 通常の Python 関数を使用すると、@tf.function によって変更される前は [イーガー実行] になり、@tf.function によって変更された後は [静的グラフ実行] になります。出力に一貫性がありません。)

2. @tf.function によって変更された関数内で tf.Variable を定義しないでください。

(説明: tf.Variable が関数内で定義されている場合、[eager 実行] では関数が呼び出されるたびに tf.Variable を作成するこの動作が発生します。しかし、[静的グラフ実行] では、この tf.Variable を作成する動作が発生します。 tf.Variable は、最初のステップが Python コードのロジックをトレースして計算グラフを作成することである場合にのみ発生します。これにより、@tf.function によって変更される前に [eager execution] が出力され、変更後に [static graph execution] が出力されます。 @tf.function によって変更されています 一貫性がありません。実際、TensorFlow は通常、この場合エラーを報告します。)

3. @tf.function で装飾された関数は、関数外の Python リストや辞書などのデータ構造変数を変更できません。

(説明: 静的計算グラフは C++ コードにコンパイルされ、TensorFlow カーネルで実行されます。Python のリストや辞書などのデータ構造変数は、計算グラフに埋め込むことはできません。それらは、計算グラフを作成するときにのみ読み取ることができます。データ構造変数Python のリストや辞書などは、計算グラフの実行中に変更できません)。

Linux 面接の質問

6. 一般的に使用される Linux コマンドをいくつか挙げてください。
答え:

列出文件列表:ls【参数 -a -l】

创建目录和移除目录:mkdir rmdir

用于显示文件后几行内容:tail,例如: tail -n 1000:显示最后1000行

打包:tar -xvf

打包并压缩:tar -zcvf

查找字符串:grep

显示当前所在目录:pwd创建空文件:touch

编辑器:vim vi

7. プロセスのコマンド
psを表示します

20. コマンドをバックグラウンドで実行する方法は?
回答:

通常、コマンドの最後に & を使用して、プログラムを自動的に実行します。(コマンドの後にスペースを追加することはできません)

22、「<」「<<」>>>>の意味の違い

23. プロセスを停止する方法。

プロジェクト関連の質問

1. 顔検出システムは、人が増えるたびに片方を鍛え直す必要があり、効率が悪いのですが、何か良い案はありますか?

11. 1000 列と 100 万行のトレーニング データセットがある場合、このデータセットは分類問題に基づいています。マネージャーは、モデルの計算時間を短縮するためにこのデータセットの次元を減らすように求めましたが、マシンのメモリが限られています。あなたは何をしますか?(あらゆる種類の実用的な仮定を自由に設定できます。)
面接担当者は、限られたメモリで高次元データを処理することの難しさを十分に認識している必要があります。使用できる処理方法は次のとおりです。

1.由于我们的RAM很小,首先要关闭机器上正在运行的其他程序,包括网页浏览器等,以确保大部分内存可以使用。
2.我们可以随机采样数据集。这意味着,我们可以创建一个较小的数据集,比如有1000个变量和30万行,然后做计算。
3.为了降低维度,我们可以把数值变量和分类变量分开,同时删掉相关联的变量。对于数值变量,我们将使用相关性分析;对于分类变量,我们可以用卡方检验。
4.另外,我们还可以使用PCA(主成分分析),并挑选可以解释在数据集中有最大偏差的成分。
5.利用在线学习算法,如VowpalWabbit(在Python中可用)是一个不错的选择。
6.利用Stochastic GradientDescent(随机梯度下降法)建立线性模型也很有帮助。
7.我们也可以用我们对业务的理解来估计各预测变量对响应变量的影响的大小。但是,这是一个主观的方法,如果没有找出有用的预测变量可能会导致信息的显著丢失。

Python開発インタビューの質問.

1. プロジェクトを作成する Django コマンド

django -admin startproject プロジェクト名

python manage.py startapp アプリケーション アプリ名

3. MVC、MVT解釈の理解

M: データベースをモデル化し、モデル化し、対話する

V: ビュー、ビュー、Html ページの生成を担当

C: コントローラであるコントローラは、リクエストを受け取り、それを処理し、M および V と対話し、レスポンスを返します。

画像

MVT:

M: モデル、モデル、MVC の M と同じ機能を持ち、データベースと対話します。

V: ビュー、ビュー、MVC の C と同じ機能を持ち、リクエストを受け取り、それらを処理し、M および T と対話し、応答を返します。

T: テンプレート、テンプレートは、MVC の V と同じ機能を持ち、Html ページを生成します。

10. Python の 3 つの主要なフレームワークのアプリケーション シナリオ

ジャンゴ:

主に迅速な開発に使用されます. そのハイライトは迅速な開発とコスト削減です. 通常の同時実行数はわずか10,000です. 高い同時実行数を達成したい場合は、重いフレームワーク全体を与えるなど、djangoで二次開発を行う必要があります.それを外してソケットを自作してhttp通信を実現し、純粋なcとc++を使って最下層の効率を上げ、ORMフレームワークをなくして、カプセル化してデータベースと対話するためのフレームワークを自作します。 ORM はデータベースを操作するためのオブジェクト指向です。その効率は非常に低く、外部キーを使用してテーブル間のクエリをリンクします。

フラスコ:

軽量, 主にインタフェースのフレームワークを書き, フロントエンドとバックエンドの分離を実現し, 開発効率を向上させる. Flask自体はカーネルに相当し, 他のほとんどすべての機能は拡張する必要があります (メール拡張 Flask-Mail 、ユーザー認証 Flask-Login)、すべてサードパーティの拡張機能で実装する必要があります。たとえば、Flask 拡張機能を使用して、ORM、フォーム検証ツール、ファイルのアップロード、本人確認などを追加できます。Flask にはデフォルトのデータベースがありません。MySQL または NoSQL を選択できます。

その WSGI ツールボックスは Werkzeug (ルーティング モジュール) を使用し、そのテンプレート エンジンは Jinja2 を使用します。これら 2 つは、Flask フレームワークのコアでもあります。Python の最も有名なフレームワークは Django であり、Flask や Tornado などのフレームワークもあります。Flask は最も有名なフレームワークではありませんが、Flask は最も柔軟なフレームワークの 1 つと見なされるべきであり、それが Flask が開発者に愛されている理由です。

トルネード:

Tornado は、Web サーバー ソフトウェアのオープン ソース バージョンです。Tornado は、今日の主流の Web サーバー フレームワーク (ほとんどの Python フレームワークを含む) とは大きく異なります。非ブロッキング サーバーであり、非常に高速です。

ノンブロッキング アプローチと epoll の使用により、Tornado は 1 秒あたり数千の接続を処理できるため、Tornado はリアルタイム Web サービスの理想的なフレームワークです。

ヨロインタビューの質問.

Yolo のアイデア: 画像全体を入力として受け取り、境界ボックスの位置とそのカテゴリを出力レイヤーに直接返す

RCNNとfaster-RCNNとの違い:どちらも画像全体を入力として使いますが、faster-RCNNはRCNNの提案+分類子の考え方を利用しています。CNNにプロポーザルを抽出するステップを入れ、yoloは直接回帰の考え方を採用

1. YOLO を紹介し、YOLO が非常に高速である理由を説明してください。
Yoloは一段階検出アルゴリズムの先駆的作品である.元のyolov1は画像分類ネットワークに基づいて直接改良された.二段階検出アルゴリズムのRPN操作を放棄し,入力に対して分類予測と回帰を直接実行した. 2 段階のターゲット検出アルゴリズムと比較すると、速度は非常に高速ですが、精度ははるかに低くなりますが、現在の V4 および V5 バージョンに繰り返し適用した後、yolo の精度は同等またはそれ以上になりました2 段階のターゲット検出アルゴリズムと同時に、非常に高速な速度を維持し、現在業界で最も人気のあるアルゴリズムの 1 つです。yolo の核となるアイデアは、バックボーンの特徴が抽出された後、入力画像を S x S のグリッドに分割し、オブジェクトの中心がどのグリッドに収まるかによってオブジェクトを予測することです。位置。

  1. NMS と IOU の原理を紹介します
    .NMS のフルネームは非最大値抑制であり、その名前が示すように、最大​​値ではない要素を抑制することです. ターゲット検出タスクでは、通常、モデルによって出力された予測フレームを解析するときに、多くの予測ターゲット フレームが存在し、その中で多くの繰り返しフレームが同じターゲットを特定します. NMS の機能は、これらの繰り返しフレームを削除することです。本当のターゲットボックスを取得します。NMS プロセスは IOU を使用します。IOU は、実際と予測の間の相関を測定するために使用される基準であり、相関が高いほど値が高くなります。IOU の計算は、2 つの領域の重複部分を 2 つの領域の集合部分で割ったものであり、これは単純に交点を和で割ったものです。

NMS では、まず予測フレームの信頼度をソートし、最も信頼度の高い予測フレームと次のフレームを順次比較して IOU を比較し、IOU があるしきい値よりも大きい場合、2 つの予測が一致したと見なすことができます。フレームは同じターゲットに到達しましたが、信頼度の低いものは除外され、順番に比較され、最終的にすべての予測ボックスが取得されます。

  1. 小さなターゲットを検出するための適切なソリューションやテクニックはありますか?
    画像ピラミッドとマルチスケール スライディング ウィンドウ検出 (MTCNN)
    マルチスケール フィーチャ フュージョン検出 (FPN、PAN、ASFF など) により、
    トレーニングと検出の画像解像度が向上し、
    超解像度戦略によりズームインと検出が行われます。

おすすめ

転載: blog.csdn.net/qq_58832911/article/details/128817297