2

サイズ308x22 x 29 x 12x492020のMATLABにテンソルがあります。かなり大きいです。私たちはそれを分解しました、そしてそれはうまくいきました。今、私たちはいくつかの予測を得るためにそれを再構築しようとしています。実行すると、最後の次元の乗算を実行すると、メモリ不足でクラッシュします。

再構成を容易にするために、テンソルを2x2行列に平坦化しようとしていました。それを行う方法が見つかりません。matlabでreshape関数を使用しようとしましたが、成功しませんでした。したがって、基本的には、matlabで(308 x 22 x 29 x 12 x 492020)テンソルを2D行列に変換する方法を知りたいと思います。

データをもう少し説明するだけです。購入する車を検索しているユーザーのデータベースがあります。おすすめモデルをやりたいです。5つの次元を持つテンソルを作成しました:308(車種)x 22(ボディタイプ)x 29(価格カテゴリ)x 12(製造年)x 492020(ユーザー)。次に、テンソル分解を実行し、最後に分解されたディメンションでクラスタリングを実行して、ユーザーを検索ごとにグループ化し、検索ログの依存関係を構築します。ここまでは大丈夫です。次に、分解されたバージョンからテンソルを再構築して、予測として機能するいくつかの新しいレコードを取得します。テンソルが巨大であることを考えると、再構築を実行するためにテンソルを平坦化する方法が必要です。私はmatlabに比較的慣れていないので、誰かがそれを行う方法のサンプルmatlabコードを共有できればよいでしょう。だから私は5Dテンソルを2Dに変換したい

4

2 に答える 2

2

MATLAB変数リストに巨大な5Dテンソルがあり、その個々の要素にアクセスできる場合は、次のように言います。MyTensor(123,17,15,4,123456)十分なストレージスペースがあれば、それを行うことができます。そのサイズのデータ​​を扱った経験はありませんが、アクセスできれば再構築できます。すべてをディスク要素ごと、スライスごと、またはn次元のハイパースライスごとに書き込む場合は、実行中の番号でファイルを分離し、これらのファイルから要素/スライス/ハイパースライスを正しい順序でロードして再構築します、次に2Dマトリックスが作成されます。要素アクセスが5Dテンソルで機能する場合は、最初に小さな5Dマトリックスを作成し、それを2Dマトリックスに変換して、巨大な5Dテンソルでも機能するアクセス方法のみを使用して寸法が正しい順序になることを確認します。その後、まったく同じコードで巨大な5Dテンソルを再構築できます。

于 2012-05-20T14:16:56.317 に答える
1

「クラスター化された」ユーザーのサンプル再構成誤差を推定するために、テンソル全体を再構成する必要はありません。たとえば、個々のユーザーをサンプリングし、再構築されたスライスを比較して、統計を収集することができます。通常、機械学習では、「サンプル外」を使用してモデルを相互検証する必要があります。つまり、トレーニングセットをテストセットからランダムに分割します。

ボディタイプは車のモデルの属性であり、価格はおおよそ各モデルの年齢(および状態)の関数であることがわかります。したがって、この場合、実際には十分な独立した寸法はありません。

492020ユーザーがメモリに収まる理由は、おそらくテンソルがまばらであるためです。分解されたテンソルの再結合は、因子にスパース性を適用しない限り、一般に密度が高くなります(ランクは低下します)。いずれの場合も、分解された形式を使用すると、計算がはるかに効率的になります。

私はあなたの「クラスタリングを行う」ステップについて心配しています-タッカー分解は線形です(主成分のように)、非負のテンソル因数分解はおそらくあなたがやりたいことに近いです..各ユーザーにいくつかの「典型的な」の非負の混合ベクトルを割り当てます" 環境設定。「クラスタリング」は、あいまいではなく、ハードエッジの分類を意味する傾向があります。

于 2014-05-23T20:48:52.723 に答える