Mam様
Tonboです。
紹介ありがとうございます。
動作を確認しました。
日経平均株価終値を予測、も動きました。
BackPropagationも入っていますね。本格的です。
活性化関数はシグモイド関数だけですが、必要であれば、ReLU等も
組み込めそうです。
学習時間も一瞬です。
畳み込みはありませんが、画像でもカメラを固定すればいけるのでは
ないでしょうか。
私は機械学習が仕事ではありませんが、生産現場で使えるようなツールを
作れたらいいなと思い、空いている時間、約1年、色々しましたが、
挫折の連続です。
〇既存のPythonのソースを参考に、畳み込みをDelphiで作ろうとしたが、
制作に時間がかかりすぎ中断。
〇妥協して、学習はTensorflowに任せ、学習結果をDelphiで使おうとしたが、
・当然あるはずの、学習結果の内部構造の記載が見つからず。
・それならと、内部構造を一気に出力するViewerを探したが、見つからず。
〇仕方がないので、学習から判断までをPythonでしようとしました。
しかし、畳み込みで画素を大きくすると、GPUがオーバーフローして学習できない。
せいぜい数百x数百どまりです。私は1000x1000以上欲しいです。
ということで、全て行き詰まっています。
mamさんのツールが解決にならないか、色々確かめてみたいと思います。
ありがとうございました。
---------------------------------------
Subject: [radstudio-jp:325] Delphiのみで人工ニューラルネットワーク(Artificial Neural Network)のクラスを作りました
Mam様
Tonboです。
ReLUの組込み、ありがとうございます。
動作することを確認しました。
ReLUでは、分類で認識率が67%と落ちますね。
理由は考えてみます。
それから、画像で良否判定にはオートエンコーダが有効です。
Delphiだけで実現したいと思っていますがハードルが高いです。
できましたら、いつか取りかかって頂けると嬉しいです。
Pythonは、できれば使いたくないです。
本当に遅いですね。
Loopしなくて良いように色んな書き方が用意されていますが、直ぐ忘れます。
新人がサクサク使っているのを見ると、さらにいやになります。
今後、Mamさんのアップされているサンプルを試してみたく思っています。
ありがとうございました。
Mam様
Tonboです。
追加のテストをありがとうございます。
こちらでは、以下のようになりました。
Sigmoidでは、入力層が784の時、確率が下がりました。
-6%が出ました。
ReLUでは、28で既に99%です。
784でも同等でした。素晴らしいです。
Sigmoidは、層が深くなるにつれ勾配喪失が起きるので、
ReLUが使われるようになったそうですね。
でもマイナス側0は、最初は気になりました。
ありがとうございました。
---------------------------------------
Epoch = 10000 共通
【Sigmoid】
Ann:=TMamAnn.Create(Neurons);
SetLength(Neurons, 4);
Neurons[0] := 28;
Neurons[1] := 80;
Neurons[2] := 40;
Neurons[3] := 10;
0 XOR 0が 0の確率100%、1の確率 0%
0 XOR 1が 0の確率 0%、1の確率100%
1 XOR 0が 0の確率 0%、1の確率100%
1 XOR 1が 0の確率100%、1の確率 0%
SetLength(Neurons, 4);
Neurons[0] := 784;
Neurons[1] := 80;
Neurons[2] := 40;
Neurons[3] := 10;
0 XOR 0が 0の確率 67%、1の確率 33%
0 XOR 1が 0の確率 -6%、1の確率106%
1 XOR 0が 0の確率 67%、1の確率 33%
1 XOR 1が 0の確率 67%、1の確率 33%
【ReLU】
Ann:=TMamAnn.Create(Neurons, 0.1, TMamActivationFunc.ReLU);
SetLength(Neurons, 4);
Neurons[0] := 28;
Neurons[1] := 80;
Neurons[2] := 40;
Neurons[3] := 10;
0 XOR 0が 0の確率 99%、1の確率 1%
0 XOR 1が 0の確率 0%、1の確率100%
1 XOR 0が 0の確率 0%、1の確率100%
1 XOR 1が 0の確率100%、1の確率 0%
SetLength(Neurons, 4);
Neurons[0] := 784;
Neurons[1] := 80;
Neurons[2] := 40;
Neurons[3] := 10;
0 XOR 0が 0の確率 99%、1の確率 1%
0 XOR 1が 0の確率 0%、1の確率100%
1 XOR 0が 0の確率 0%、1の確率100%
1 XOR 1が 0の確率100%、1の確率 0%
Tonboです。
いつもお世話になっています。
特殊な質問です。
Delphi 64Bit版アプリ + D2XXUnit.pas + ftd2xx.dll
で、BitBang動作させている方はみえるでしょうか?
対象は、FT245RLモジュールです。
なお、Delphiを32Bitでコンパイルすれば問題なく動作します。
【行き詰まった点】
・USUドライバ ftd2xx.dllには32Bit版と64Bit版があります。
しかし、FT245RLを刺したとたんに、32Bit版(推測)
ftd2xx.dllで接続されるため、64Bit版アプリから、設定、動作
させようとするとエラーで停止します。
・ドライバアンインストーラ CDMuninstallerGUI.exeで
ドライバのアンインストールをして、64Bit版アプリから、
設定、動作させようとしましたがエラーで停止します。
・64Bit版ftd2xx.dllのみをインストールしようとしましたが、
私ではできませんでした。
【補足】
・D2XXUnit.pas、ftd2xx.dll、CDMuninstallerGUI.exeはFTDI社の
HPから入手しました。
https://www.ftdichip.com/old2020/Support/SoftwareExamples/CodeExamples/Delphi.htm
https://www.ftdichip.com/old2020/Drivers/D2XX.htm
https://ftdichip.com/utilities/
・ドライバのインスト―ルは、
CDM21228_Setup.zipのダブルクリックと、
CDM v2.12.28 WHQL Certified.zipからと
2つ確かめましたが、どちらも同じでした。
・Delphi 10.4、11.2 どちらでもNGです。
・FT245RLモジュールは秋月電子から購入しました。
https://akizukidenshi.com/catalog/g/gK-01799/
【注意】
・D2XXUnit.pasをコンパイルするには、implementationを
Procedure FT_Error_Reportの前に移動が必要でした。
・D2XXUnit.pasには、implementation移動等の
修正版がありますが、結果は同じでした。
https://github.com/serbod/dataport/blob/master/D2XXUnit.pas
色々試したのですが、闇雲のため省略します。
Delphi 64Bit版で動作させている方がみえましたら
アドバイスお願いいたします。
--
このメールは Google グループのグループ「Japan RAD Studio User Group」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには radstudio-jp...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/radstudio-jp/000c01d94f51%243cc55190%24b64ff4b0%24%40ybb.ne.jp にアクセスしてください。
やましょう様
早速ご返事ありがとうございます。
ご指摘のように、
CDM v2.12.28 WHQL Certified.zipには
・64Bit版のftd2xx64.dll(633kB)
・32Bit版のftd2xx.dll(383kB)
が入っていて、FTDI社の以下の
「FTDI Drivers Installation Guide forWindows 10」の
「Manual Installation」通りドライバをインストールすると、
ftd2xx64.dllがリネームされC:\Windows\System32\ ftd2xx.dllに入ります。
(32Bit版はC:\Windows\SysWOW64\ ftd2xx.dllに入る)
https://www.ftdichip.com/old2020/Support/Documents/InstallGuides.htm
次をしてみましたが、エラー「プロセスが有効ではありません」が出ます。
1.D2XXUnit.pasのdllの指定を、ftd2xx64.dllにする。
FT_DLL_Name = 'C:\略\ ftd2xx64.dll ';
2. FT_DLL_Name = ' C:\Windows\System32\ ftd2xx.dll ';
3. System32の64Bit版 ftd2xx.dllをexeのカレントフォルダに置く。
64Bit版 ftd2xx.dllがあるので諦めきれず、粘っています・・・
--
このメールは Google グループのグループ「Japan RAD Studio User Group」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには radstudio-jp...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/radstudio-jp/000101d94fa8%24f3b20310%24db160930%24%40ybb.ne.jp にアクセスしてください。
やましょう様
続けてありがとうございます。
これまで32Bitだけで済ませてきたつけが回ってきました。
D2xx以前の問題と気付きました。
色々行いましたが、まだ解決していません。
【D2XXUnit.pas】
・オリジナルのimplementationを、式「Procedure FT_Error_Report」の前に
移動したものを使用しています。
関係する式
・FT_HANDLE : DWord = 0;
・function FT_SetBaudRate(ftHandle:Dword; BaudRate:DWord):FT_Result; stdcall; External FT_DLL_Name name 'FT_SetBaudRate';
【Delphi側】
順番に実行
・GetFTDeviceCount; //FT_Device_CountにFT245RLの個数が入る
・GetFTDeviceSerialNo(0); //SerialNumberにナンバーが入る
・Open_USB_Device_By_Serial_Number(SerialNumber); // FT_Handleが設定される
・FT_SetBaudRate(FT_Handle, 38400); //ボーレート設定。ここでエラー
【エラー】
・FT_SetBaudRate(FT_Handle, 38400);で
FT_Handleと 38400 がD2XXUnit.pas側に伝わず、エラーとなります。
双方、同じDword 4バイトなのでいいと思うのですが。
D2XXUnit.pasで
・FT_HANDLE :THANDLE = 0; としてみましたが、範囲外エラーになりました。
間違い等、ご指摘いただけると嬉しいです。
---------------------------------------
--
このメールは Google グループのグループ「Japan RAD Studio User Group」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには radstudio-jp...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msgid/radstudio-jp/001101d95030%244991bb40%24dcb531c0%24%40ybb.ne.jp にアクセスしてください。
やましょう様
Tonboです。
資料、ありがとうございました。
無事、動作を確認しました!
これから外出し、夜遅く戻ります。
帰ってから間違いを調べます。
それと、WUNI232Cも拝見します。
これで、64Bitでもftd2xxが使えることが分かり安心しました。
まずはお礼申し上げます。
From: radstu...@googlegroups.com <radstu...@googlegroups.com> On Behalf Of Shoichi Yamasuge
Sent: Monday, March 6, 2023 11:58 PM
To: radstu...@googlegroups.com
Subject: Re: [radstudio-jp:365] Re: Delphi 64Bit
版アプリ + D2XXUnit.pas + ftd2xx.dll
やましょうさん、Kitahataさん、福士さん
Tonboです。
アドバイスと情報をありがとうございました。
無事、解決しました。
32bitアプリを作ってきて、「ハンドルはCardinal 32bit」の
固定観念がありました。
やましょうさんから「FT_HANDLE: がDWORD 32BITになっていますが、
これ64BITに変更しないとダメだと思います。」のアドバイスを
頂いたのですが、理解できませんでした。
具体的に提示いただかなければ、解決できないまま終わったと思います。
本当に感謝いたします。
PS:
・Dependenciesでftd2xx.dllの全関数が見えました。
(Dependency Walkerではフリーズしました)
各変数のバイト数までわかるといいですね。
・今後、UARTも64Bit対応にします。
WUNI232Cを試させていただきます。
From: radstu...@googlegroups.com <radstu...@googlegroups.com> On Behalf Of Shoichi Yamasuge
Sent: Monday, March 6, 2023 11:58 PM
To: radstu...@googlegroups.com
版アプリ + D2XXUnit.pas + ftd2xx.dll