Aktywne Wpisy

siepan +1
Mirki jaki radzicie mały niedrogi polski słodycz dołożyć do paczki (zamówienia) do #portugalia żeby posmakował Portugalczykowi?
Niemcy często dorzucają takie mikro/nano paczuszki żelków, zazwyczaj Haribo. Doradźcie coś
#slodycze #jedzzwykopem #ecommerce
Niemcy często dorzucają takie mikro/nano paczuszki żelków, zazwyczaj Haribo. Doradźcie coś
#slodycze #jedzzwykopem #ecommerce
źródło: jnkys7bl3xw51
Pobierz
G06DbT +32
Chyba kupię sobie namiot, śpiwór, jakieś tanie gary, i będę na weekendy znikał gdzieś na rowerze, bo co to za życie.





Mam problem dot. zamiany listy tablic 2D (n x n) na numpy array. Gdy to zrobię zużycie RAM drastycznie rośnie. Miał ktoś z tym taki problem?
Zadanie realizuję w CoLab jak i u siebie na PC, lokalnie. Prześlę zużycie RAM w odpowiednich miejscach.
Scenariusz wygląda tak:
- wczytuje obraz
Gen RAM Free: 12.8 GB | Proc size: 447.8 MB
- dziele go na podobrazy o rozdzielczości 13 x 13
- otrzymuję "List of 6859434 images"
Gen RAM Free: 11.9 GB | Proc size: 2.1 GB
**Lista wessała 1.5GB, może być**
- następnie zamieniam listę za pomocą polecenia np.array(lista)
Xtrain = np.asarray(Xtrain,dtype=np.float32)
Xtest= np.asarray(Xtest,dtype=np.float32)
- otrzymuję "Shape of our training data: (6859434, 13, 13, 1)"
Gen RAM Free: 11.9 GB | Proc size: 8.1 GB
Jak widać, 6 GB zostało wessane poprzez zmianę list na array :/ jakieś pomysły? Nie chcę być zmuszony do kupienia 64GB RAM do PC...
#python #machinelearning
@Darkus777: nie wiem, może przez to. Tak tylko strzelam
- kasujesz listy po zrobieniu arrayow? Jak tworzysz numpy arraye z list to i tak stworzy się kopia
- sprawdzales rozmiar tych arrayow poleceniem sys.getsizeof() ? To pozwoli Ci kontrolować, co faktycznie zajmuje miejsce, a nie tylko kontrolować, ile całej pamięci zajmuje program.
Dla float32 - 10 zdjęć - 9,91GB
Dla float16 - 10 zdjęć - 5,74GB
Tylko dziwi mnie to, bo przecież tablica powinna zajmować mniej od listy ;p
@tomasztomasz1234: Tak, kasuję. Operacją "del". Wg dokumentacji przy asarray nie trzeba, dla np.array
I pod tym, co Ty skopiowałeś pokazany jest przykład kodu właśnie jak robisz asarray na czymś, co już jest arrayem, a u Ciebie jak rozumiem robisz asrray na liście jako argumencie. Zresztą prosto możesz sprawdzić, czy asarray zrobił kopię czy
@Darkus777: np.concat()
Wytłumaczę szerzej, każdy mój element 15x15 jest obrazem czterokanałowym czyli jego wymiary wyglądają następująco (15,15,4). Wycinam 4 obrazki z każdego kanału a potem je łącze czyli mam cztery tablice o wymiarach (15,15,1) i łącze je w jeden o wymiarze (15,15,4), w tej samej iteracji. Więc każdy element to ([..], [..], [..], [..]).
Masz jakiś błąd w kodzie, bo w przypadku listy masz ewidentnie datatype uint8, a w przypadku arraya masz float32. Mówisz że nie, ale wystarczy że sobie policzysz:
6859434 obrazów x 15 x 15 x 1 bajt (jako że uint8) to wychodzi dokładnie 1,5 GB.
Przy zmianie na float32 masz oczywiście 4 razy więcej, więc 6 GB.
Lista musi zajmować praktycznie dokładnie tyle samo miejsca co korespondujący numpy array. Główna różnica jest taka że numpy array to ciągły blok pamięci, a
https://imgur.com/a/rdVi2K3 - zbieram w liście float32, bo sam obraz jest tego typu.
Przeczytaj sobie wątek https://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python
https://imgur.com/a/s7nNNj2
Łączna liczba obrazów 8574293
Lista (8574293,15, 15) to jest 1929,215925 GB. W poprzednim komentarzu pokazałem w trybie debug jak ta lista wygląda od środka, widać, że każdy element to float32 :/ Jako, że float32 to masz 4bajty czyli 7716,863700 GB dla array, co się zgadza bo 11.8GB - 4.1GB daje ~7,7GB ;)