If you're completely new to GANs I recommend you check out the GAN playlist where there is an introduction video to how GANs work and then watch this video where we implement the first GAN architecture from scratch. If you have recommendations on GANs you think would make this into an even better resource for people wanting to learn about GANs let me know in the comments below and I'll try to do it :) I learned a lot and was inspired to make these GAN videos by the GAN specialization on coursera which I recommend. Below you'll find both affiliate and non-affiliate links, the pricing for you is the same but a small commission goes back to the channel if you buy it through the affiliate link. affiliate: bit.ly/2OECviQ non-affiliate: bit.ly/3bvr9qy Here's the outline for the video: 0:00 - Introduction 0:29 - Building Discriminator 2:14 - Building Generator 4:36 - Hyperparameters, initializations, and preprocessing 10:14 - Setup training of GANs 22:09 - Training and evaluation
I think in 18:22 usung detach is better. for one thing retain_graph = True cost more memories and for another if we dont use detach we optimize the paras in G when we train D
if we use detach, what is the point of disc_fake? disc_fake = disc(fake.detach()).view(-1) and if we do a backward() we get no grads out of it(because fake.detach()'s require_grad=False) which means no update happens here
8:00 - transforms.Normalize((0.1307,), (0.3081,)) will not work because of the following: * nn.Tanh() output of the Generator is (-1, 1) * MNIST values are [0, 1] * Normalize does the following for each channel: image = (image - mean) / std * So transforms.Normalize((0.5,), (0.5,)) converts [0, 1] to [-1, 1], which is ALMOST correct, because nn.Tanh() output of Generator (-1, 1) excluding one and minus one. * transforms.Normalize((0.1307,), (0.3081,)) converts [0, 1] to ≈ (-0.42, 2.82). But Generator can not generate values greater than 0.9999... ≈ 1, so it will not generate 2.8 for white color. That is why transforms.Normalize((0.1307,), (0.3081,)) will not work. P.S. To use transforms.Normalize((0.1307,), (0.3081,)) you should multiply nn.Tanh() with 2.83 ≈ nn.Tanh() * 2.83 ≈ (-2.83, 2.83)
If you're using Google Colab Just add these lines: %load_ext tensorboard # To load the tenserboard notebook extension %tensorboard --logdir logs # before training your model
Hello. Thx for the video. I tried this code exactly except that i used 400 epoch. But still fake images are like noises. How did you get this results on the tensorboard. Can you please share the hyperparams that you used?
Question: 18:18 Code line 77. We have to compute disc(fake) twice? can't we simply write: "output = disc_fake"? (I thought we add retain_graph=True in order to avoid the computation of the disc(fake) twice)
We do retain_graph so that we don't have to compute fake twice so we can re-use the same image that has been generated. We send it through the discriminator again because we updated the discriminator, and they way I showed in the video is the most common setup I've seen when training GANs. Although it would probably also work if you did reuse disc_fake from previously
!python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" - what is the relevance of this to the GAN you have worked on in this video
out of experience, mixing relu with tanh does not work super well, this is also a point you might add to your final possible improvements list, like only use tanh for the whole generator.
Thank you so much for the material, this is awesome! I have a small question. Why would it be `disc.zero_grad()` instead of `opt_disc.zero_grad()`? in general, are these 2 statements interchangeable?
Perhaps I didn't show it in the video but you have to run it through conda prompt (or terminal etc). I have more info on using tensorboard in a separate video so I was kind of assuming that people knew it but I could've been clearer on that!
@@AladdinPersson this is new for me so I’m still learning all the tools. Please keep doing tutorials btw!! You have been helping me learn AI so much faster due to your pytorch implementations.
Hey, so this simple GAN generates any number? What I mean is, the neural networks have not learnt the features of 0, 1, 2, 3, ... individually, they have learnt what features make up a number in general? Then when z, the random sample from a distribution, is plugged into the generator, it generates a random number because of the noise it was given? Hence, the results could be better if you created a GAN pair for each individual number, which would obviously take a lot more training time and the networks would be mutually exclusive and not random, so you'd have a GAN pair that generates a fake version of every digit.
Hi can you explain why we would use BCE loss on the Generator as well and why we would compare it to a tensor of 1s? It makes sense to me to use it for the discriminator as it is a classifier, but is the generator not doing some form of regression?
Really love this series man!! Just a quick question though why did we use fixed_noise and noise differently. In the training part can we not have used fixed_noise as input to generator because noise is noise right? Does it matter if we start from the same point?
Fixed noise is used to display the images to track the progress of the GAN. Fixed means it doesn't change over time, so if you were to use this in training, you would be feeding the GAN the same vector over and over again, and the GAN would only be able to generate a single image, and the rest of the latent space would remain unexplored.
At discriminator we want max log(D(real)) + log(1-d(g(z))). Since loss functions work by minimizing error we can minimize - (log(D(real)) + log(1-d(g(z)))). The bceloss is similar to min the above written loss. So it works fine. At Generator we want to max log(d(g(z))). Could you please explain how criterion(output, torch.ones_like(output)) maximizes log(d(g(z)))? because the loss function is ln =−wn [yn.logxn+(1−yn)⋅log(1−xn)]. According to your code aren't we trying to maximize -log(d(g(z)))? because there is a negative in loss function. shouldn't we add negative in our training phase? please explain me. I am stuck here
@@madhuvarun2790 can you please elaborate . as i see it on discriminator side, loss_real = - (log(D(real)) and loss_fake = - log(1-d(g(z)))).. but its still minimizing right ? I cant understand how thats maximizing the loss, the same doubt with generator loss
@@asagar60 Yes. It is minimizing the loss. I was wrong. At discriminator we are minimizing -(log(d(real)). At generator we are minimizing -log(d(g(z)))
This video is was really helpful, but what if I don't want to use the MNIST dataset and I want to use my own dataset from my local machine, please how do I go about it?
I have separate videos on how to use custom datasets, for something written I highly recommend: pytorch.org/tutorials/beginner/data_loading_tutorial.html
Heyo, awesome vid as always! I wanted to ask you if you could do some variational autoencoders in pytorch & maybe also cover some of the mathematics of the special variants, if you are interested (i.e. as you're doing for GANs)? :)
Roughly saying, we want the discriminator to estimate the *probability that its input is real*. Therefore the desired output for disc(real) is 1, and 0 for disc(fake).
Very good explanation of each and every line of code. Can you please make a video on how to optimize GANs with Whale Optimization Algorithm. i have to do my project in GAN and this is my base paper "Automatic Screening of COVID‑19 Using an Optimized Generative Adversarial Network". I have searched a lot about how to optimize GANs with WHO but couldn't find any related result. please help me as you have a detailed knowledge about GANs.
The loss in GANs don't tell us anything really (one will go up when the other goes down and vice-versa). The only thing you want to watch out for is if discriminator would go to 0 or something like that, so that would be the case if one of them "takes over"
If it's not a dataset included in Pytorch torchvision you could create a custom dataset class (it's not too difficult). I have separate video on custom datasets in Pytorch you could take a look at. Here is also a great official tutorial from Pytorch: pytorch.org/tutorials/beginner/data_loading_tutorial.html
these are the parameters you can change according to a known distribution to use the generator to produce images. I guess 64 is way to high for mnist. maybe you can use 10 so you can blend any of the digits.
Is it normal that this easily takes 1-2 hours for 50 epochs? I first ran it on my computer which unfortunately has no nvidia GPU. Then I tried it on Google Colab, which originally had it running on its CPU too. So I changed their Hardware acceleration to GPU, aaaaand... if it's faster, then not by much. Is that normal? Does this not benefit significantly from GPUs?
Hey, how did you overcome this error in colab? TypeError Traceback (most recent call last) in () 1 for epoch in range(num_epochs): ----> 2 for batch_idx, (real, _) in enumerate(loader): 3 real=real.view(-1, 784).to(device) 4 batch_sz= real.shape[0] 5 4 frames /usr/local/lib/python3.7/dist-packages/torchvision/datasets/mnist.py in __getitem__(self, index) 132 133 if self.transform is not None: --> 134 img = self.transform(img) 135 136 if self.target_transform is not None: TypeError: 'module' object is not callable
@@drishtisharma3933 Hey Drishti! Yes, I was able to overcome this error but I do not remember the exact changes I made to the code. I could share my colab notebook for your clarity. Honestly, I didn't try your approach. I was following the video as a code-along. Link: colab.research.google.com/drive/1l1Vt7mcoEQKFxxVbpQOeKZ-UiEHU9ggt?usp=sharing
I'm admittedly a noob to all of this, but I keep getting this "TypeError: __init__() takes 1 positional argument but 2 were given" and I can't figure out how to resolve the issue, any advice would be appreciated
it seems like while defining the class method you originally coded a method which takes one argument , but while calling the same method as object you provided two arguments in there. eg. def lets_solve(error): pass #Instantiating an object now solution = lets_solve(error, YOU PROVIDED ONE EXTRA ARGUMENT HERE) YOU PROVIDED ONE EXTRA ARGUMENT HERE ----> denotes the extra argument which you shouldn't have provided going by the original code which takes just one arg. Hope this makes sense. Good luck!
Hello! I have been subscribed to you since a long time. I haven’t watched your videos other than machine learning from the scratch videos. What are prerequisites to start learning from this series??! People who are very well versed deep learning. How did you all learn? I am not intimidated by math... but it takes some time for me to understand. Give me some helpful tips please.In what order should I start learning deep learning? This would be a great help.
Generator don't identify. It only generates. To minimize loss, is to make the generator generate samples very close to real in order not to be identified by the discriminator
If you're completely new to GANs I recommend you check out the GAN playlist where there is an introduction video to how GANs work and then watch this video where we implement the first GAN architecture from scratch. If you have recommendations on GANs you think would make this into an even better resource for people wanting to learn about GANs let me know in the comments below and I'll try to do it :)
I learned a lot and was inspired to make these GAN videos by the GAN specialization on coursera which I recommend. Below you'll find both affiliate and non-affiliate links, the pricing for you is the same but a small commission goes back to the channel if you buy it through the affiliate link.
affiliate: bit.ly/2OECviQ
non-affiliate: bit.ly/3bvr9qy
Here's the outline for the video:
0:00 - Introduction
0:29 - Building Discriminator
2:14 - Building Generator
4:36 - Hyperparameters, initializations, and preprocessing
10:14 - Setup training of GANs
22:09 - Training and evaluation
I think in 18:22 usung detach is better. for one thing retain_graph = True cost more memories and for another if we dont use detach we optimize the paras in G when we train D
if we use detach, what is the point of disc_fake?
disc_fake = disc(fake.detach()).view(-1) and if we do a backward() we get no grads out of it(because fake.detach()'s require_grad=False) which means no update happens here
Ah, my bad. fake.detach() won't get updated but disc()'s parameters will
Awesome video, you explain exactly what should be explained, I love it!
8:00 - transforms.Normalize((0.1307,), (0.3081,)) will not work because of the following:
* nn.Tanh() output of the Generator is (-1, 1)
* MNIST values are [0, 1]
* Normalize does the following for each channel: image = (image - mean) / std
* So transforms.Normalize((0.5,), (0.5,)) converts [0, 1] to [-1, 1], which is ALMOST correct, because nn.Tanh() output of Generator (-1, 1) excluding one and minus one.
* transforms.Normalize((0.1307,), (0.3081,)) converts [0, 1] to ≈ (-0.42, 2.82). But Generator can not generate values greater than 0.9999... ≈ 1, so it will not generate 2.8 for white color.
That is why transforms.Normalize((0.1307,), (0.3081,)) will not work.
P.S. To use transforms.Normalize((0.1307,), (0.3081,)) you should multiply nn.Tanh() with 2.83 ≈ nn.Tanh() * 2.83 ≈ (-2.83, 2.83)
This makes total sense, thanks for clarifying!
Thank you so much for explaining this... :)
Perfect explanation of the loss function and why we use the minimization instead of maximization of Discriminator.
Doing minimization of anything is way simpler and faster in terms of computation rather than computing maxima
You Are Awesome😎😎. Please Continue This Series...Thanks For Awesome Video Series
Thanks a lot for the video. It really helped me in understanding the naunces of GAN and helped me write it from scratch as well. Keep on going, buddy!
Very nicely explained. Loved your clarity.
thanks a lot, now i have a better understanding of GAN
Can you made a video on Cyclic GAN ?
A bit late but it's finished now. Paper walkthrough is up and implementation from scratch will be up in a few days :)
At 15:33, and 19:14 why use disc.zero_grad() and gen.zero_grad() instead of using opt_disc.zero_grad(), and opt_gen.zero_grad() respectively ?
how can i include tensorboard features within the GAN ipynb file to visualize the log files?
If you're using Google Colab
Just add these lines:
%load_ext tensorboard # To load the tenserboard notebook extension
%tensorboard --logdir logs # before training your model
Nice intro to GANs, thanks!
Thanks for sharing , that's really helpful!
how do you get the images to show on tensorboard?
Hello, i love your videos as they are very precised and perfect but how do i view using colab instead of tensor flow
I love the way your ide looks, what are you using/ what settings?
Dang Man! Love your videos, you're EPIC!!!
What changes will be there in the code if we use disc(fake).detach() instead? Will there be any changes in line 77? at 18:34
Thanks Awesome and simple implementation :)
Hello. Thx for the video. I tried this code exactly except that i used 400 epoch. But still fake images are like noises. How did you get this results on the tensorboard. Can you please share the hyperparams that you used?
What are your IDE settings btw? Theme and font
how is the song called at 20:00? sounds so chill made me move like on the dancefloor while at my working desk learning GANs with u
Thank you very much! I got lots of things
This worked for me thanks, am enjoying this playist!
Thanks for the amazing content really helpful, Can we have some GAN stuff using audio data please? voice cloning maybe?
Thanks again
When computing lossD, what is the difference in practice between summing versus averaging lossD_real and loss_Dfake? @15:20
Nice work!
Question : Why we use zero_grad with disc and dis and not opt_disc and opt_gen?
Great Tutorial.
Question:
18:18
Code line 77.
We have to compute disc(fake) twice? can't we simply write: "output = disc_fake"?
(I thought we add retain_graph=True in order to avoid the computation of the disc(fake) twice)
We do retain_graph so that we don't have to compute fake twice so we can re-use the same image that has been generated. We send it through the discriminator again because we updated the discriminator, and they way I showed in the video is the most common setup I've seen when training GANs. Although it would probably also work if you did reuse disc_fake from previously
@@AladdinPersson Got you...! Thanks a lot
Thanks, it was a very good video!
Why are we using 128 nodes in the Discriminator class? Isn't that kind of a random number?
And why 256 in the Generator?
The code run great, but how did you make those images at 20:37 appear????
I been trying to do that in google colab, the code work, but no image.
Same question.
@@ZOBAER496 %load_ext tensorboard
%tensorboard --logdir logs
run this in a seperte cell
!python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" - what is the relevance of this to the GAN you have worked on in this video
Thank you, helped me alot
out of experience, mixing relu with tanh does not work super well, this is also a point you might add to your final possible improvements list, like only use tanh for the whole generator.
Why is your tensorboard updating automatically the new images? For me I have to refesh the page in order for it to update
Great effort. Good tutorial
Thank you so much for the material, this is awesome! I have a small question. Why would it be `disc.zero_grad()` instead of `opt_disc.zero_grad()`? in general, are these 2 statements interchangeable?
yeah ,i'm confused about that too, dude
they're the same
Both are the same since it optimizes the model parameters
How did you get the tensorboard site to pop up?
Perhaps I didn't show it in the video but you have to run it through conda prompt (or terminal etc). I have more info on using tensorboard in a separate video so I was kind of assuming that people knew it but I could've been clearer on that!
@@AladdinPersson this is new for me so I’m still learning all the tools. Please keep doing tutorials btw!! You have been helping me learn AI so much faster due to your pytorch implementations.
@@privacywanted434 Thanks for saying that, I appreciate you 👊
awesome!! one request from me ...can you make a video on text to image using GAN's please !!!
Do you have this GAN code available for downloading?
how do we get the training accuracy at each epoch ?
Nice video, thanks. Can you please make a video on RCGAN?
Hey, so this simple GAN generates any number? What I mean is, the neural networks have not learnt the features of 0, 1, 2, 3, ... individually, they have learnt what features make up a number in general? Then when z, the random sample from a distribution, is plugged into the generator, it generates a random number because of the noise it was given? Hence, the results could be better if you created a GAN pair for each individual number, which would obviously take a lot more training time and the networks would be mutually exclusive and not random, so you'd have a GAN pair that generates a fake version of every digit.
Hey please help me ...we wrote down the same code still getting error what. Should we do
You're like a magic 🔥
how would it be different if we use AdamW instead of Adam?
Hello. What should be different for non-square image data?
CNNs instead of fc layers.
Hi can you explain why we would use BCE loss on the Generator as well and why we would compare it to a tensor of 1s? It makes sense to me to use it for the discriminator as it is a classifier, but is the generator not doing some form of regression?
The formula is log(1 - D(G(Z))). So we use it on the discriminator.
On line #66, why gen function only takes in one argument noise. I thought it must takes in two arguments z_dim and img_dim. Can you explain please?
anyone is having trouble related with the tensorboard visualization? like I am using Pycharm but the visualization part doent get executed
Is the intro eq. cross entropy loss function ?!
Is it possible to train this gan with a .CSV dataset?
what program do you do this in?
Thanks!
What notebook prompt are you using to call up that TensorBoard UI?
Figured it out, for anyone with the same question. In a separate cell run:
%load_ext tensorboard
%tensorboard --logdir logs
magic
@@Zeoytaccount Oh Babe it works ,such a sweety wish I could send you a thankuuuuuu
Please can someone tell which editor he is using?
can someone explain what z_dim is actually?
thank you~
What version of CUDA are you using?
The latest one always pretty much, which as of right now is cuda 11.1 I think
Really love this series man!! Just a quick question though why did we use fixed_noise and noise differently. In the training part can we not have used fixed_noise as input to generator because noise is noise right? Does it matter if we start from the same point?
Fixed noise is used to display the images to track the progress of the GAN. Fixed means it doesn't change over time, so if you were to use this in training, you would be feeding the GAN the same vector over and over again, and the GAN would only be able to generate a single image, and the rest of the latent space would remain unexplored.
At discriminator
we want max log(D(real)) + log(1-d(g(z))). Since loss functions work by minimizing error we can minimize
- (log(D(real)) + log(1-d(g(z)))). The bceloss is similar to min the above written loss. So it works fine.
At Generator
we want to max log(d(g(z))). Could you please explain how criterion(output, torch.ones_like(output)) maximizes log(d(g(z)))? because the loss function is ln =−wn [yn.logxn+(1−yn)⋅log(1−xn)]. According to your code aren't we trying to maximize -log(d(g(z)))? because there is a negative in loss function. shouldn't we add negative in our training phase? please explain me. I am stuck here
Nevermind, I understood it. Thanks
@@madhuvarun2790 can you please elaborate . as i see it on discriminator side, loss_real = - (log(D(real)) and loss_fake = - log(1-d(g(z)))).. but its still minimizing right ? I cant understand how thats maximizing the loss, the same doubt with generator loss
@@asagar60 Yes. It is minimizing the loss. I was wrong. At discriminator we are minimizing -(log(d(real)). At generator we are minimizing -log(d(g(z)))
This video is was really helpful, but what if I don't want to use the MNIST dataset and I want to use my own dataset from my local machine, please how do I go about it?
I have separate videos on how to use custom datasets, for something written I highly recommend: pytorch.org/tutorials/beginner/data_loading_tutorial.html
Heyo, awesome vid as always! I wanted to ask you if you could do some variational autoencoders in pytorch & maybe also cover some of the mathematics of the special variants, if you are interested (i.e. as you're doing for GANs)? :)
I had confusion regarding line 68 and 70 why are we creating ones and zeros in criterion?
Please clarify this portion....
great work as always....
Roughly saying, we want the discriminator to estimate the *probability that its input is real*. Therefore the desired output for disc(real) is 1, and 0 for disc(fake).
I can't see tensorboard. I am running the same code on colab. Please help me. Thank You
%load_ext tensorboard
%tensorboard --logdir logs
run this in a seperate cell , it works
for batch_idx, (real, _) in enumerate(loader):
for this part its giving an error
TypeError: 'module' object is not callable
How do you enter the Tensorboard ???
im stuck there someone link a vid
%load_ext tensorboard
%tensorboard --logdir logs
run this in a seperate cell it works
what does the parameter z_dim means?
Very good explanation of each and every line of code. Can you please make a video on how to optimize GANs with Whale Optimization Algorithm. i have to do my project in GAN and this is my base paper "Automatic Screening of COVID‑19 Using an Optimized Generative
Adversarial Network". I have searched a lot about how to optimize GANs with WHO but couldn't find any related result. please help me as you have a detailed knowledge about GANs.
how can i run that tensorboard?
same doubt
why my tensorflow couldn't open
in GANs generator loss should decrese and discriminator loss should increase is that so? i am little bit confused .
The loss in GANs don't tell us anything really (one will go up when the other goes down and vice-versa). The only thing you want to watch out for is if discriminator would go to 0 or something like that, so that would be the case if one of them "takes over"
How can I flip the labels 1 for fake and 0 for real ? Thanks a lot this video is helping me a lot !!! 😍
hello sir can you tell me how to convert GANs generated dataset in to .jpg format??? please
Be careful with jpgs in your training set. Jpg uses 8x8 blocks that introduce artifacts, either use very high quality jpgs, or even better, pngs
I have no idea what is happening but its soo interesting
How can I transfer this code to work with RGB images? It keeps printing lines as an output after learning instead of images :(
you need to use dcgan instead of gan.
Would you mind sharing the name of intro music? :D
SAME!
It is Straight Fuego by Matt Large
@@beizhou2488 Thankyou mah man.
How would I edit this if I wanted to use my own dataset?
If it's not a dataset included in Pytorch torchvision you could create a custom dataset class (it's not too difficult). I have separate video on custom datasets in Pytorch you could take a look at. Here is also a great official tutorial from Pytorch: pytorch.org/tutorials/beginner/data_loading_tutorial.html
wonderful intro to GAN, thank you very much! actually not feel a little confused what is z_dim...
these are the parameters you can change according to a known distribution to use the generator to produce images. I guess 64 is way to high for mnist. maybe you can use 10 so you can blend any of the digits.
thanks
why do we have (lossD_real + lossD_fake)/2
Ooh the jacobian
Is it normal that this easily takes 1-2 hours for 50 epochs?
I first ran it on my computer which unfortunately has no nvidia GPU. Then I tried it on Google Colab, which originally had it running on its CPU too. So I changed their Hardware acceleration to GPU, aaaaand... if it's faster, then not by much. Is that normal? Does this not benefit significantly from GPUs?
Hey, how did you overcome this error in colab?
TypeError Traceback (most recent call last)
in ()
1 for epoch in range(num_epochs):
----> 2 for batch_idx, (real, _) in enumerate(loader):
3 real=real.view(-1, 784).to(device)
4 batch_sz= real.shape[0]
5
4 frames
/usr/local/lib/python3.7/dist-packages/torchvision/datasets/mnist.py in __getitem__(self, index)
132
133 if self.transform is not None:
--> 134 img = self.transform(img)
135
136 if self.target_transform is not None:
TypeError: 'module' object is not callable
@@drishtisharma3933 Hey Drishti! Yes, I was able to overcome this error but I do not remember the exact changes I made to the code.
I could share my colab notebook for your clarity.
Honestly, I didn't try your approach. I was following the video as a code-along.
Link: colab.research.google.com/drive/1l1Vt7mcoEQKFxxVbpQOeKZ-UiEHU9ggt?usp=sharing
can you please share the code
is not it should be optimizer.zero_grad instead of model.zero_grad
You can use both
11:25
You forgot to put right parenthesis..
Kidding :P
Thanks for the video bro
I'm admittedly a noob to all of this, but I keep getting this "TypeError: __init__() takes 1 positional argument but 2 were given" and I can't figure out how to resolve the issue, any advice would be appreciated
Difficult to say w/o code, in this case it seems like you're sending in too many arguments haha
If I had to guess, you might have a class method that doesn't have a "self" parameter
it seems like while defining the class method you originally coded a method which takes one argument , but while calling the same method as object you provided two arguments in there.
eg.
def lets_solve(error):
pass
#Instantiating an object now
solution = lets_solve(error, YOU PROVIDED ONE EXTRA ARGUMENT HERE)
YOU PROVIDED ONE EXTRA ARGUMENT HERE ----> denotes the extra argument which you shouldn't have provided going by the original code which takes just one arg. Hope this makes sense. Good luck!
GREAT
Hello! I have been subscribed to you since a long time. I haven’t watched your videos other than machine learning from the scratch videos. What are prerequisites to start learning from this series??!
People who are very well versed deep learning. How did you all learn? I am not intimidated by math... but it takes some time for me to understand. Give me some helpful tips please.In what order should I start learning deep learning?
This would be a great help.
Hey, I got a video How to learn deep learning that answers your questions I think:)
idont know much about pytorch but ill figure it out...
Why do we maximize the generator loss? Shouldn't the generator be good at identifying the fake generated by descriminator?
Generator don't identify. It only generates. To minimize loss, is to make the generator generate samples very close to real in order not to be identified by the discriminator
7:45 bruh :D
Nn.linear for what bro
please makea video about anime infogan
Re: (i just wanted to make sure that people understand that this is a joke...) | on lr = 3e-4
Damn, I nearly heartbreak when i set wrong values for transforms.Normalizer
lr of 3e-4 was a joke by Karpathy
the karpathy constant was never a joke