User Story Tango Master Leading the Entrance Rituals in Personal Life

User Story Tango Master Leading the Entrance Rituals in Personal Life #

Hello, I’m Tango.

I’m delighted to have the opportunity to share my learning experience in this column. First, let me introduce myself. I am a non-computer science programmer with 11 years of work experience (majoring in Japanese in college). Currently, I work at NTTDATA (China) Data Information Technology Co., Ltd., and I joined the army of developers out of interest in programming.

If you usually pay attention to the community or the InfoQ writing platform, you may have some impression of my profile picture. Since purchasing my first course in 2017, I have accumulated a total of 153 courses, of which I have completed 130 courses. As an arts student, before encountering Geek Time, I used to search for resources or buy related books on a certain online platform for self-study, but the learning effect was not ideal.

Image

With the popularity of machine learning in recent years, I have also started to get in touch with this field. To be honest, it is quite difficult to get started in the field of machine learning. Not only do you need to complete the conversion of logical thinking, but you also need to supplement a lot of basic knowledge.

I have bought many books before, but they always seem difficult to read. And the information I can find online either consists of mathematical formulas throughout, which makes classmates like me who have returned all mathematical knowledge to the teacher feel regretful, or it simply brushes over the principles and piles up code snippets all the way. In short, learning is extremely painful and it is also difficult to pinpoint the key points. So when I saw this column go online, I got it right away.

Compared to the printed books I have read before, I think there are many advantages to learning through this column.

First of all, the knowledge that the teacher has accumulated comes from actual projects, so the knowledge we come into contact with is the most useful part.

Secondly, because the column is in the form of audio accompanied by text and images, it greatly enhances memory. For example, I listen to the audio during commutes or other spare time, and when I have a block of time, I will review the text and images to revise what I have learned before.

Finally, there is one point that I particularly value, which is the interactive function provided by the column. There is a community (mainly WeChat groups) under each column course for interaction with teachers and classmates. As the saying goes, where there are three people walking together, one must be my teacher. Many times, technical learning requires a good atmosphere for communication and discussion.

In my spare time, I have also participated in activities of the open source community. Currently, I volunteer for the OpenVINO Chinese Community, and OpenVINO is used for machine learning inference, which makes me more interested in how to use PyTorch to train models.

This column is full of practical knowledge from basic theory to practical articles, which is much better than the videos I watch online and the books I buy. However, with the intensiveness of knowledge and the increase in difficulty, how to better grasp the content of the column and achieve the best learning effect has become an urgent problem that needs to be solved.

My Study Method #

I have organized my study method into five steps: learning, reviewing, summarizing, reflecting, and continuous learning.

Image

First, let’s talk about initial learning. I usually listen to audio materials on a daily basis and try to understand the overall content over the weekend. With a frequency of three articles per week, there is still a lot of content to learn. If I only listen to the audio, the gain is very limited. Therefore, I like to spend my weekends writing the code from the column again and re-understanding the content, especially the code in the articles. It is worth studying carefully.

Many friends don’t want to join the column if it’s not a video course. But from my experience, I feel that learning from graphic and text columns is more efficient.

Next is reviewing. Unlike soft skill columns, if we only listen while commuting or doing housework, the learning effect will be greatly reduced. These types of hands-on practice columns need to be reviewed, practiced, digested, and summarized repeatedly.

How do we summarize? One method that I highly recommend is to summarize the knowledge points from the column and publish them on the InfoQ writing platform. I used to write some of my notes in local Markdown documents, but later I found it very inconvenient to search for them when needed. So gradually, I switched to the InfoQ writing platform. This way, I can not only view my notes at any time but also share them with others.

Speaking of methods, I also want to talk about what content is worth summarizing. In my opinion, in addition to the knowledge points from the column, the teachers’ Q&A in the WeChat group and the comments section of the column are also valuable treasures and worth organizing. After digesting the explanations in the column, I will publish all the summary content on the InfoQ writing platform. I also welcome my friends to take a look.

In addition to written output, in order to practice the “Feynman learning method,” evaluate my learning effectiveness, and share what I have learned with others, I sometimes live stream on Bilibili. During the live streaming process, if there are any questions or details I can’t recall, I will go back to look at the column again or search online. That’s why my live streams always have some mishaps.

When studying programming courses, it is easy to have an illusion that you understand everything just by reading and watching, but when you actually try to code, you may feel that you haven’t grasped the previous content well enough. With the live coding process, I feel that learning becomes more relaxed and interesting, and I can also spot and fill in any gaps.

Lastly, there is the issue of continuous learning. Although many columns have concluded, there are still new contents and knowledge points appearing in the comments section. So how to keep up with the updates in the comments section of the column in real-time? I use an automated method by writing a tool to track it regularly. For example, I would scrape the comments and the teacher’s replies once a week and then spend the following week organizing them.

Besides, the column has limited length, and many details cannot be explained in every aspect. If I encounter these situations in my work or projects, I need to search and find the answers myself. This is also a process of continuous learning.

Learning Gains and Suggestions #

In my opinion, taking this course was definitely the right decision. Through studying this column by Teacher Fangyuan, I not only gained a good understanding of important knowledge about PyTorch, but also learned about the definitions of some commonly used mathematical formulas, which was a pleasant surprise.

The teacher explains the code logic of the formulas using Python code. As we all know, Python code is relatively easy to understand, which greatly reduces the learning cost for beginners.

Through the entire column, I have basically mastered the basic application of PyTorch. During the learning process, I also made friends with many classmates who are learning together. The teacher’s explanations of VGG, GoogLeNet, and ResNet are concise and clear, which is of great help to beginners who want to understand algorithms in the field of computer vision.

The most impressive aspect of the entire column is that after the teacher explains theoretical knowledge, he uses practical examples from real life to provide exercises. For example, in the section on NumPy related content, the teacher covers the essential knowledge points in one chapter, and then in the next chapter, he utilizes the previous chapter’s content and creates a practical demo using the Geekbang logo. This is very friendly to beginners and allows them to quickly apply what they have learned, making the learning process enjoyable.

In the later part of the learning, I learned that NumPy cannot be used for GPU acceleration, but Tensors can. I had never heard of this knowledge point before, and learning it has been of great help to my subsequent training. I also refactored some of my previous code and achieved significant improvements.

When studying the chapters related to convolution, the teacher thoughtfully provided a document:

Image

This document also saved me some time searching for information in my project.

Before taking this course, when attending conferences, I often heard people mention the multi-machine and multi-card method for model training, but I didn’t have a clear understanding of how to implement it. After completing this column, I have learned how to build a distributed training environment. Once my graphics card arrives, I will start experimenting.

For now, I have bookmarked Lesson 16 of the column. Here are the key code blocks provided by the teacher:

python if args.distributed: if args.dist_url == "env://" and args.rank == -1: args.rank = int(os.environ["RANK"]) if args.multiprocessing_distributed: # For multiprocessing distributed training, rank needs to be the # global rank among all the processes args.rank = args.rank * ngpus_per_node + gpu dist.init_process_group(backend=args.dist_backend, init_method=args.dist_url, world_size=args.world_size, rank=args.rank) ​

Additionally, after completing the first round of learning, I attempted a Japanese character recognition project using PyTorch. Currently, I am still working on it. Here is a code snippet that is part of the handwritten digit recognition (MNIST) project:

Image

The entire training is set for 20 epochs:

Image

After completing Teacher Fang’s column, I want to utilize PyTorch to see how well it works with OpenVINO. I am still in the learning stage. When I am ready to showcase it, I will share the GitHub address in the comments or community.

From the code perspective, PyTorch seems easier to use and its API changes are not as drastic as TensorFlow. It is well-suited for learning. Moreover, it is also convenient to convert it into a format supported by OpenVINO. Only the OpenVINO model optimizer is needed to convert ONNX to IR format.

In addition to the above inspirations, useful tools can greatly improve work efficiency. The TensorboardX and Visdom tools introduced in the column (Lesson 15) are great. They allow for better visualization of the training process of deep learning models, allowing real-time monitoring of various data, such as loss, evaluation metrics, etc. Previously, I had been checking these in a notebook by myself, but now I use these tools mentioned in the course, which makes visualization much easier and saves a lot of time.

Finally, the content in the practical section is worth pondering. For example, before I learned this column, I was often confused about how to accurately extract the content I needed from PDF files of different styles. After completing the course (Lesson 17 to Lesson 18), I was greatly inspired. I can convert the PDF (non-editable version) into images first, and then train a target classifier based on certain rules. Then, I can use different classifiers to perform image recognition and extract the content I need (Lesson 19 to Lesson 20).

After saying so much, I still hope that you, like me, can dive deep into studying this column and try experiments together. If you have already joined the learning group like me, I hope you can gain something after going through the course once. Join me in reviewing this course, and there will definitely be different gains. If you have any questions in practical projects, feel free to actively discuss them in the comments area or the community.

This concludes what I have shared. Thank you for reading. It is my greatest honor if it can be helpful to you. If there are any shortcomings, please feel free to leave a message. Let’s progress together. Geekbang makes learning a habit.