Trend Olan Konular
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Bugünkü korku programlama bölümünde...
random.seed()'nin Python dokümanında kesinlikle bize söyleniyor
"Eğer a bir int'se, doğrudan kullanılır." [1]
Ama 3 veya -3 ile tohum yaparsanız, aslında aynı RNG nesnesini elde edersiniz ve aynı akışları üretir. (TIL). Nanochat'te, tren/test bölünmeleri için farklı rastgelelik dizilerini almak için (sandığım gibi) akıllıca bir yol olarak işareti kullanıyordum. Bu yüzden gnarly bug çünkü şimdi train=test.
CPython kodunu cpython/Modules/_randommodule.c [2] içinde buldum, 321. satırda bir yorumda görüyoruz:
"Bu algoritma, numaranın imzalamamış olmasına dayanır. Yani: arg bir PyLong ise, mutlak değerini kullanın." ve ardından
n = PyNumber_Absolute(arg);
bu da tohumunuza açıkça abs() çağırarak pozitif hale getirir, işaret bitini atlar.
Ama bu yorum aslında yanlış/yanıltıcı. Kaputun altında, Python Mersenne Twister algoritmasına MT19937 algoritma adını veriyor; bu algoritma genel durumda 19937 (sıfır olmayan) bit durumuna sahiptir. Python, ink'nizi (veya diğer nesneleri) alır ve bu bilgiyi bu bitler arasında "yayar". Prensipte, işaret biti durum bitlerini artırmak için kullanılabilirdi. Algoritmada "numaranın imzalanmamış olmasına dayanan" hiçbir şey yok. İşaret kısmının dahil edilmemesi kararı alındı (bence bu bir hataydı). Basit bir örnek, n -> 2*abs(n) + int(n < 0) haritalamak olabilir.
Son olarak, bu bizi Python'un rastgele sözleşmesine götürüyor, ki bu da belgelerde tam olarak açıklanmamış. Bahsedilen sözleşme şudur:
aynı tohum => aynı dizi.
Ancak farklı tohumların farklı diziler üreteceği garantisi verilmez. Yani prensipte, Python örneğin seed(5) ve seed(6)'nin farklı RNG akışları olduğuna dair hiçbir söz vermez. (Gerçi bu birçok uygulamada oldukça yaygın olarak örtük olarak kabul edilir.) Gerçekten de, tohum(5) ve tohum(-5)'in aynı akarular olduğunu görüyoruz. Ve muhtemelen makine öğreniminde tren/test davranışlarınızı ayırmak için onları kullanmamalısınız. Son zamanlarda karşılaştığım en eğlenceli programlama korku tabancalarından biri. Bir sonraki bölümde görüşürüz.
[1]
[2]

En İyiler
Sıralama
Takip Listesi

