在數據表之間複製許多大型公式(神經網絡)非常非常慢我有用於神經網絡建模的10000行x 100+列的數據集。我製作了75個不同的模型,其中包含20個節點x 100個輸入/節點,並使用快速公式保存了公式。我有10個不同的表(相同的數據集,不同的模型),每個表有75個模型,並且我想將所有模型(公式)合併到一個主表中,因為我想將所有模型應用於我收集的任何新數據。
我嘗試的每種方法都將永遠永久。我已經使用了“複製公式”加載項將每個表的公式複製到一個表中,總共花費大約2天時間才能完成所有表合併,並且沒有進度的跡象,很難知道它是否仍在工作或凍結的。
我通過將行與隱含公式求值匹配來使用Join,以便將它們全部合併到一個表中,這很快。但是,當我通過手動選擇公式列並使用“列”>“標準化屬性”>“列屬性”>“公式”>“抑制評估”來重新打開公式求值時,重新計算750個公式會花費很多時間。它已經運行了30個小時(處理器利用率最高達到12%),我不知道進度如何。
我嘗試一次遍歷各列以打開公式求值,但是即使對1列進行此操作也要花費5分鐘以上,這似乎要花很長時間。
有什麼辦法可以加快速度嗎?我知道有解決方法,但這似乎應該比這更容易,更快捷。
回复:在數據表之間複製許多大型公式(神經網絡)非常非常慢對於“較大”的問題,很難在不了解某些或全部細節的情況下提供有關效率的一般建議。如果還沒有,您可以查看'Begin Data Update()'和'End Data Update()'表消息的影響,和/或控制對公式進行評估的方式。FWIW,我的直覺告訴我,使用公式倉庫作為中介。我開始寫一些代碼來檢查這一點,但是對於這種規模的問題,建模本身需要一些時間,所以我沒有繼續這樣做:
NamesDefaultToHere(1);
// Define the data volume
nr = 100;
nc = 10;
// Make some random data
dt = AsTable(J(nr, nc, RandomNormal(0, 1)));
dt << setName("Random Data");
// Fit neural and publish prediction formula
cols = dt << getColumnNames("String");
yCol = cols[NItems(cols)];
RemoveFrom(cols, NItems(cols));
nn = dt << Neural(Y(Eval(yCol)), X(Eval(cols)), Fit( NTanH( 3 ) ), Invisible);
nn(Fit(1)) << publishPredictionFormula;
Report(nn) << closeWindow;
回复:在數據表之間複製許多大型公式(神經網絡)非常非常慢嗨,伊恩,
感謝您的快速回复。我只是通過使用所有公式從列添加公式來嘗試了公式倉庫方法,腳本創建很快。當我在刪除了“公式列”的重複表上測試運行腳本(運行6個腳本)時,運行速度非常快。到目前為止,一切都很好。然後,當我嘗試在同一張表上運行所有腳本時,啟動速度很快,但隨著創建更多列而逐漸變慢(我可以在“列”窗格中看到正在創建的列)。最終似乎凍結了(5分鐘內未創建新列)。嗯 現在,我將嘗試分批進行操作,以查看是否有幫助。
回复:在數據表之間複製許多大型公式(神經網絡)非常非常慢我想知道是否同時重新計算了這些公式,並且正在爭奪處理器時間。
回复:在數據表之間複製許多大型公式(神經網絡)非常非常慢我嘗試一次從“公式庫”對100個公式進行運行腳本。前100個跑得相當快。第二個100慢下來,似乎停了下來。
我嘗試從Formula Depot複製所有公式的腳本,並包裝在<< Begin Data Update ... <<結束數據更新。
我嘗試在用Suppress Eval(1)複製的公式列上運行Suppress Eval(0)。我遍歷了包裹在<< Begin Data Update .... Col(i)中的列,取消了Eval(0)...... Wait(0)<< End Data Update。我嘗試了10列。沒用
到目前為止,我沒有嘗試過比在公式評估已啟用的情況下手動逐行連接表要快得多的方法了,這花了幾天的時間.....
PS有沒有辦法破壞正在運行的腳本?