cari
Rumahpembangunan bahagian belakangTutorial PythonBagaimana Pencarian Loteri Membawa Saya ke Kuasa PyTorch

pengenalan

Pada suatu ketika, anda mungkin pernah mendengar bahawa peluang anda untuk memenangi loteri a sangat tipis. Seperti semua perkara yang berkaitan dengan kebarangkalian, beberapa percubaan mungkin memihak kepada anda. Sekarang, jika anda mengambil bahagian dalam banyak loteri, peluang anda untuk memenangi satu akan menjadi lebih baik, bergantung pada bilangan lagi loteri yang anda sertai. Ini sama sekali bukan jaminan bahawa anda akhirnya akan menang, tetapi dengan pengedaran seragam , dan mengikut undang-undang bilangan besar (dalam kes ini bermakna bilangan loteri yang banyak), kita boleh mencapai kemungkinan yang lebih berkemungkinan besar.

Adalah penting untuk memahami bahawa setiap loteri baharu adalah bebas daripada yang lain, dan "nombor tiket" loteri yang sama boleh memenangi banyak loteri yang berbeza (mengikut undang-undang nombor besar). Anda juga mungkin tidak bernasib baik dan memilih nombor yang salah dalam setiap loteri, tidak kira berapa kali anda mencuba. Anda mempunyai dua pilihan sekarang:

  1. Anda boleh mencuba nombor rawak setiap kali.
  2. Anda boleh mencuba nombor sama setiap kali.

Secara teori (dan secara matematik), kedua-dua senario mempunyai kebarangkalian yang sama untuk berlaku. Walau bagaimanapun, senario 2 akan memberi anda sedikit kelebihan. Apabila bilangan kali menghampiri infiniti, setiap nombor akhirnya akan dipilih. Masalahnya ialah dengan senario 1, anda perlu mencuba lebih banyak kali dengan harapan nombor yang anda pilih pada masa itu sepadan dengan nombor yang menang. Dengan senario 2, anda pasti bahawa kerana percubaan cenderung kepada infiniti, nombor anda pada satu ketika akan "menang". Untuk catatan blog ini, kami akan menggunakan senario 2.

Jadi, adakah anda fikir anda boleh menjawab soalan ini sebelum saya memberitahu anda jawapannya?

"Jika semua loteri di sekeliling anda mempunyai slot untuk tepat 1 juta orang dan anda memilih tiket yang sama [x] untuk semua orang yang anda mainkan, berapa banyak loteri yang anda perlu bermain untuk akhirnya menjadi pemenang?" (Jangan ragu untuk mengulas tentang jawapan awal anda)

Jawapannya...
How a Lottery Quest Led Me to The Powers of PyTorch

Kira-kira 14.4 juta kali.

Selebihnya catatan blog ini adalah tentang cara saya mencapai nilai itu, cara simulasi dilakukan dan beberapa kaveat. Perkara akan menjadi lebih teknikal dari sini.
How a Lottery Quest Led Me to The Powers of PyTorch

Logik

Nombor tiket loteri 1 juta orang akan berjulat antara 1 - 1,000,000 (atau 0 - 999,999). Pemain hanya boleh memilih nombor dalam julat itu untuk setiap loteri, dan tiket yang menang hanya boleh dari julat itu. Pada asasnya, kita boleh katakan kita akan mempunyai set 1 juta nombor.

Mengambil kira hakikat bahawa pengguna boleh memilih mana-mana nombor dalam julat itu, kami perlu memenuhi syarat setiap item dalam set dipukul sekurang-kurangnya sekali. Ini kerana jika setiap nombor telah dipanggil sekurang-kurangnya sekali, ia akan meliputi sebarang kemungkinan nombor tiket yang boleh dipilih oleh pemain. Ini juga bermakna kami tidak mengambil berat tentang berapa kali setiap nombor dijalankan, menjadikan "set" struktur data Python yang ideal untuk digunakan untuk simulasi kami. Kami akan bermula dengan set kosong, dan mengisinya dengan nombor yang dijana secara rawak pada setiap lelaran sehingga set mengandungi setiap nombor dalam julat yang ditentukan. Memandangkan set Python tidak mengulangi nombor, kami tidak perlu risau tentang memastikan keunikan.

def calculate_lottery_chances(lottery_players_count):
  number_set = set()
  count = 0

  while len(number_set) 



<p>Untuk loteri 1,000,000 orang, panggilan fungsi akan kelihatan seperti: calculate_lottery_chances(1000000), dan ia akan mengembalikan bilangan percubaan loteri sebelum menang. Menyusun kod dengan cara ini menjadikannya sangat boleh dipanjangkan.</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173567637690021.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How a Lottery Quest Led Me to The Powers of PyTorch"></p>

<h2>
  
  
  Masalahnya
</h2>

<p>Ringkasnya, punca masalah adalah "variasi". Kali pertama saya menjalankan fungsi itu, saya mendapat "13.1 juta" kali sebagai nilai saya. Saya menyiarkannya semula, dan mendapat sesuatu sepanjang garis 13.9 juta. Saya melakukan ini lebih banyak kali dan mendapat jawapan yang berbeza-beza - pada satu ketika, saya mendapat 15 juta. Sudah jelas bahawa saya perlu melakukan ini dan mencari purata. Mengikuti corak yang sedia ada setakat ini, saya menganggap bahawa kerana bilangan lelaran untuk meratakannya cenderung ke arah infiniti, saya akan lebih hampir mendapat <strong>satu</strong> jawapan yang boleh dipercayai. Terdapat keperluan untuk sesuatu yang boleh melakukan ini, dan melakukannya dengan pantas, dan itu membawa saya untuk menulis fungsi ini:<br>
</p>

<pre class="brush:php;toolbar:false">def average_over_n_times(function, function_arg, n):
  """
  This returns the average of the returned value of a function
  when it is called n times, with its (one) arg
  """
  total = 0
  for x in range(0, n):
    total += function(function_arg)

  return round(total/n)

Selepas itu, semuanya akan ditambal sebagai:

num_of_trials = average_over_n_times(calculate_lottery_chances, lottery_players_count, n)

Di mana "n" akan mewakili bilangan kali kepada purata hasil dengan. Ini, bagaimanapun, membawa masalah lain yang akan dibincangkan dalam bahagian seterusnya.

Apa yang sepatutnya "n"?

Semakin besar nilai n, semakin hampir kepada hasil "average-case". Walau bagaimanapun, memandangkan masih tiada perkara mutlak atau kepastian, melaksanakan siri tugasan ini terlalu banyak kali berhenti menjadi produktif. Saya mengatakan ini atas sebab berikut:

  • Masa tidak terbatas, dan kita tidak boleh melakukan pengiraan ini selama-lamanya, bermakna akan sentiasa ada variasi (tidak kira betapa sedikit) setiap kali ia dijalankan, mengalahkan idea "mutlak".
  • Sumber pengiraan adalah terhad.
  • Salah satu andaian percubaan ini ialah "kerawak" yang dihasilkan oleh komputer boleh meniru realiti dengan tepat.
  • Sama seperti masa jalan algoritma, magnitud yang lebih kecil berhenti sama pentingnya dengan magnitud yang lebih besar. Variasi kira-kira 100,000 tidak akan begitu ketara apabila berurusan dengan nilai yang lebih besar daripada 13,000,000.

Mengingat perkara ini, saya menguji "n" dengan nilai: 10, 20, 30, 50, 100, 1000 dan 5000 kali.

Di manakah PyTorch masuk?

Pada ketika ini, anda mungkin tertanya-tanya mengapa perkataan "PyTorch" dalam tajuk catatan blog tidak disebut. Nah, walaupun saya menyebut ujian n dengan nilai yang berbeza, ia bukan kod yang sama yang saya gunakan untuk semua ujian.

Ini adalah percubaan yang berat dari segi pengiraan, dan CPU saya bercakap dengan saya. Coretan kod yang saya kongsikan sebelum ini ditulis dalam satu fail yang mempunyai sifar kebergantungan pakej luaran, dan fail itu dijalankan dalam shell bash dengan arahan masa didahulukan untuk menjejaki masa pelaksanaan. Inilah rupa masa pelaksanaan apabila hanya menggunakan CPU:

n Time (min and sec)
10 1m34.494s
20 3m2.591s
30 5m19.903s
50 10m58.844s
100 14m56.157s

Pada 1000, saya tidak dapat menjalankan program ini lagi. Saya tidak pasti sama ada ia pecah separuh jalan dan gagal menghentikan pelaksanaan, tetapi saya membatalkannya selepas 4 jam dan 57 minit. Terdapat beberapa faktor yang saya rasa mempengaruhi perkara ini, yang akan saya bincangkan dalam bahagian "kaveat". Bagaimanapun, bunyi kipas saya berbunyi, dan saya tahu saya mungkin telah menolak CPU komputer riba saya yang dikuasakan sederhana terlalu banyak. Saya enggan menerima kekalahan dan sambil memikirkan perkara yang boleh saya lakukan untuk sekurang-kurangnya menjalankan lelaran 4 digit, saya teringat sesuatu yang diberitahu oleh rakan saya yang bekerja dengan PyTorch kepada saya:

"GPU secara amnya lebih cekap dalam pengiraan intensif berbanding CPU"

PyTorch menggunakan GPU, menjadikannya alat yang sesuai untuk kerja itu.

Pemfaktoran semula

PyTorch akan digunakan untuk pengiraan untuk tujuan kami, jadi pemfaktoran semula kod calculate_lottery_chances() sedia ada bermakna menukar operasi berangka yang bergantung kepada CPU dan bertukar kepada struktur data PyTorch yang sesuai. Secara ringkasnya:

  • Jenis data set() Python tidak lagi mencukupi.
  • Fungsi Python randint() akan ditukar dengan PyTorch yang setara.
  • Memandangkan jenis data set() tidak mencukupi, akan ada suis untuk menjana tensor sifar yang sepadan dengan saiz bilangan_pemain_loteri, dengan boolean untuk menunjukkan sama ada sesuatu nombor itu pernah menang atau tidak.

Faktor semula bagi mengira_peluang_loteri akan kelihatan seperti:

def calculate_lottery_chances(lottery_players_count):
  number_set = set()
  count = 0

  while len(number_set) 



<p>Saya menetapkan peranti saya sebagai "xpu" kerana komputer saya menggunakan GPU Intel Graphics, yang disokong oleh PyTorch.</p>

<h2>
  
  
  Keluaran
</h2>

<p>Untuk memastikan GPU saya digunakan semasa pelaksanaan, saya membuka pengurus tugas Windows saya dan menavigasi ke bahagian "prestasi" sebelum menjalankan. Semasa berlari, saya melihat peningkatan ketara dalam penggunaan sumber GPU.<br>
Untuk konteks, berikut ialah sebelum vs selepas:</p>

<p>Sebelum:</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173567637915280.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How a Lottery Quest Led Me to The Powers of PyTorch"><br>
Perhatikan penggunaan GPU adalah pada 1%</p>

<p>Selepas:</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173567638051975.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How a Lottery Quest Led Me to The Powers of PyTorch"><br>
Perhatikan penggunaan GPU adalah pada 49%</p>

<p>Untuk masa jalan untuk nilai n yang berbeza-beza, GPU adalah beberapa kali lebih pantas. Ia menjalankan nilai n di bawah 100 secara konsisten dalam masa kurang daripada seminit, dan dapat mengira nilai n pada <strong>5000</strong> (lima ribu!)</p>

<p>Berikut ialah jadual masa jalan menggunakan GPU:</p>

<div><table>
<thead>
<tr>
<th>n</th>
<th>Time (min and sec)</th>
</tr>
</thead>
<tbody>
<tr>
<td>10</td>
<td>0m13.920s</td>
</tr>
<tr>
<td>20</td>
<td>0m18.797s</td>
</tr>
<tr>
<td>30</td>
<td>0m24.749s</td>
</tr>
<tr>
<td>50</td>
<td>0m34.076s</td>
</tr>
<tr>
<td>100</td>
<td>1m12.726s</td>
</tr>
<tr>
<td>1000</td>
<td>16m9.831s</td>
</tr>
</tbody>
</table></div>

<p>Untuk mengetahui betapa besarnya jurang prestasi antara operasi GPU dan CPU untuk percubaan ini, berikut ialah visualisasi data untuk difikirkan:</p>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173567638195144.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="How a Lottery Quest Led Me to The Powers of PyTorch"></p>

<p>Paksi-x dihadkan pada 100 kerana saya tidak lagi boleh mendapatkan output "tepat pada masa" secara realistik daripada CPU, sekali gus tidak meninggalkan ruang untuk dibandingkan dengan GPU. Melaksanakan eksperimen dengan nombor dalam julat 1000 - 5000 memberi saya kira-kira "14.4 juta kali" sebagai hasilnya, lebih kerap daripada tidak. Begitulah saya mendapat jawapan dari tadi.</p>

<h2>
  
  
  Kaveat
</h2>

<p>Percubaan ini membuat andaian dan bergantung pada cara tertentu untuk melakukan sesuatu. Selain itu, pengalaman saya dengan PyTorch berpotensi bermakna terdapat pendekatan yang lebih cekap. Berikut ialah beberapa faktor yang perlu dipertimbangkan bahawa <strong>mungkin</strong> mempengaruhi sama ada ketepatan penemuan saya atau masa pelaksanaan:</p>

<ol>
<li>Saya membuat andaian halus bahawa rawak yang dijana oleh komputer meniru rawak dalam kehidupan sebenar (dunia fizikal).</li>
<li>Semasa saya menukar sedikit logik untuk menggunakan PyTorch, selebihnya kod masih bergantung pada CPU. Sebagai contoh, dalam fungsi average_over_n_times(), ada kemungkinan bahawa kedua-dua penambahan dalam gelung dan purata mungkin mendapat manfaat daripada setara PyTorch. Saya mengesyaki akan ada peningkatan prestasi.</li>
<li>Saya tidak pasti tentang kesan saiz_kelompok yang saya gunakan pada ketepatan dan prestasi.</li>
<li>Semua ujian CPU dan GPU telah dilakukan dengan PC saya dipalamkan, untuk membolehkan mesin berfungsi pada tahap terbaik. Menjalankannya dengan peranti menggunakan kuasa bateri mungkin melihat masa jalan yang lebih lama.</li>
<li>CUDA PyTorch mungkin mempunyai kelebihan berbanding "XPU", ​​tetapi PC saya tidak mempunyai sokongan untuk yang pertama. </li>
<li>Saya mengelak daripada membiarkan PC saya "tidur" semasa ujian. Ujian mungkin mengambil masa lebih lama untuk dijalankan jika komputer anda tidur.</li>
</ol>

<p>Akhir sekali, saya ingin menyatakan bahawa ini adalah kali pertama saya menggunakan PyTorch untuk apa-apa sahaja, dan saya agak kagum dengan persembahannya.</p>

<h2>
  
  
  Kesimpulan
</h2>

<p>Apabila saya pergi ke lubang arnab dengan ini, saya tidak menjangkakan untuk melihat keuntungan seperti itu dalam prestasi. Saya mempelajari idea di sebalik tensor dan beberapa perkara tentang mekanisme sokongan di sebalik tugasan yang lebih kompleks dari segi pengiraan. Anda mempunyai kebebasan untuk menggunakan, meniru atau mengubah suai coretan kod mengikut kehendak anda.</p>

<p>Terima kasih kerana memanjakan saya, dan saya harap anda seronok membaca.</p>

<p>Sehingga lain kali,</p>

<p>Sekian. ?</p>


          

            
        

Atas ialah kandungan terperinci Bagaimana Pencarian Loteri Membawa Saya ke Kuasa PyTorch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Python: Automasi, skrip, dan pengurusan tugasPython: Automasi, skrip, dan pengurusan tugasApr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Python dan Masa: Memanfaatkan masa belajar andaPython dan Masa: Memanfaatkan masa belajar andaApr 14, 2025 am 12:02 AM

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python: Permainan, GUI, dan banyak lagiPython: Permainan, GUI, dan banyak lagiApr 13, 2025 am 12:14 AM

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

Python vs C: Aplikasi dan kes penggunaan dibandingkanPython vs C: Aplikasi dan kes penggunaan dibandingkanApr 12, 2025 am 12:01 AM

Python sesuai untuk sains data, pembangunan web dan tugas automasi, manakala C sesuai untuk pengaturcaraan sistem, pembangunan permainan dan sistem tertanam. Python terkenal dengan kesederhanaan dan ekosistem yang kuat, manakala C dikenali dengan keupayaan kawalan dan keupayaan kawalan yang mendasari.

Rancangan Python 2 jam: Pendekatan yang realistikRancangan Python 2 jam: Pendekatan yang realistikApr 11, 2025 am 12:04 AM

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Python: meneroka aplikasi utamanyaPython: meneroka aplikasi utamanyaApr 10, 2025 am 09:41 AM

Python digunakan secara meluas dalam bidang pembangunan web, sains data, pembelajaran mesin, automasi dan skrip. 1) Dalam pembangunan web, kerangka Django dan Flask memudahkan proses pembangunan. 2) Dalam bidang sains data dan pembelajaran mesin, numpy, panda, scikit-learn dan perpustakaan tensorflow memberikan sokongan yang kuat. 3) Dari segi automasi dan skrip, Python sesuai untuk tugas -tugas seperti ujian automatik dan pengurusan sistem.

Berapa banyak python yang boleh anda pelajari dalam 2 jam?Berapa banyak python yang boleh anda pelajari dalam 2 jam?Apr 09, 2025 pm 04:33 PM

Anda boleh mempelajari asas -asas Python dalam masa dua jam. 1. Belajar pembolehubah dan jenis data, 2. Struktur kawalan induk seperti jika pernyataan dan gelung, 3 memahami definisi dan penggunaan fungsi. Ini akan membantu anda mula menulis program python mudah.

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam?Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam?Apr 02, 2025 am 07:18 AM

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.