- ตัวดำเนินการ
-
เรียนรู้
ศูนย์การเรียนรู้ Python ตัวอย่างที่รันได้, NumPy, pandas และอื่น ๆ ศูนย์การเรียนรู้ C และ C++ พอยน์เตอร์ หน่วยความจำ STL และ C++ สมัยใหม่ ศูนย์การเรียนรู้ C#พื้นฐาน C#, OOP, LINQ, async และแบบฝึกหัด .NET อัลกอริทึม Python การค้นหา การเรียงลำดับ รีเคอร์ชัน และภาพจำลอง O(n) อัลกอริทึม C และ C++ เปรียบเทียบการเขียนด้วย C และ C++
- โจทย์
Gradient descent แบบ mini-batch คือวิธีที่ใช้ฝึกโครงข่ายประสาทเทียมแทบทุกตัว: แบ่งข้อมูลเป็น batch เล็ก ๆ แล้วอัปเดตน้ำหนักหลังแต่ละ batch
ฝึก y = w × x + b ด้วยค่าคลาดเคลื่อนกำลังสองเฉลี่ย เริ่มจาก w = 0 และ b = 0 ในแต่ละ epoch ให้แบ่งตัวอย่าง ตามลำดับ เป็น batch ละ batch_size ตัว (batch สุดท้ายอาจเล็กกว่า) สำหรับแต่ละ batch ขนาด n:
- errorᵢ = w × xᵢ + b - yᵢ สำหรับแต่ละตัวอย่างใน batch
- dw = (2 / n) × Σ errorᵢ × xᵢ และ db = (2 / n) × Σ errorᵢ
- w ← w - learning_rate × dw และ b ← b - learning_rate × db
จง implement train_mini_batch(xs, ys, batch_size, learning_rate, epochs)
อินพุต
xs, ys: จุดข้อมูล (ความยาวเท่ากัน)
batch_size: จำนวนตัวอย่างต่อ batch
learning_rate, epochs: ขนาดก้าวและจำนวนรอบที่วนผ่านข้อมูล
เอาต์พุต
คืนค่า [w, b] หลังการฝึก
เงื่อนไข
1 ≤ จำนวนจุด ≤ 1,000, 1 ≤ batch_size ≤ จำนวนจุด, 0 ≤ epochs ≤ 1,000
0 < learning_rate ≤ 1
-100 ≤ แต่ละค่า ≤ 100
ตัวอย่าง
ตัวอย่างที่ 1
อินพุต:
xs = [1.0, 2.0, 3.0]
ys = [2.0, 4.0, 6.0]
epochs = 1
batch_size = 2
learning_rate = 0.1
ผลลัพธ์ที่คาดหวัง:
[2.44, 1.08]
คำอธิบาย
Batch 1 คือ x = [1, 2]: error -2 และ -4, dw = -10, db = -6 ดังนั้น w = 1 และ b = 0.6 Batch 2 คือ x = [3] เพียงตัวเดียว: error 1×3 + 0.6 - 6 = -2.4, dw = 2 × (-2.4) × 3 = -14.4 และ db = -4.8 ดังนั้น w = 2.44 และ b = 1.08 ผลลัพธ์: [2.44, 1.08]
ตัวอย่างที่ 2
อินพุต:
xs = [1.0, 2.0, 3.0, 4.0]
ys = [3.0, 5.0, 7.0, 9.0]
epochs = 1
batch_size = 4
learning_rate = 0.05
ผลลัพธ์ที่คาดหวัง:
[1.75, 0.6]
คำอธิบาย
Batch ที่ใหญ่เท่าชุดข้อมูลก็คือ gradient descent แบบ batch ธรรมดา: อัปเดตหนึ่งครั้งต่อ epoch ผลลัพธ์: [1.75, 0.6]
แหล่งอ้างอิง
-
ตัวอย่างที่ 1 ยังไม่ได้รันอินพุต:
xs = [1.0, 2.0, 3.0] ys = [2.0, 4.0, 6.0] epochs = 1 batch_size = 2 learning_rate = 0.1ผลลัพธ์ที่คาดหวัง:[2.44, 1.08]เอาต์พุตของคุณ -
ตัวอย่างที่ 2 ยังไม่ได้รันอินพุต:
xs = [1.0, 2.0, 3.0, 4.0] ys = [3.0, 5.0, 7.0, 9.0] epochs = 1 batch_size = 4 learning_rate = 0.05ผลลัพธ์ที่คาดหวัง:[1.75, 0.6]เอาต์พุตของคุณ
มี 4 การทดสอบที่ซ่อนอยู่จะถูกรันเมื่อคุณส่งคำตอบ
คอมไพเลอร์และดีบักเกอร์ C++ ออนไลน์
ดีบัก C++ ด้วย breakpoint ตัวแปร และการทำงานทีละขั้นของ GDB ในโหมดเซิร์ฟเวอร์
🚀 2,392,381 การดำเนินการทั้งหมด (7 ในเดือนนี้)
ฝึก C++ ด้วยโจทย์เขียนโค้ด
แก้โจทย์จริงใน editor นี้: รันทดสอบตัวอย่าง ส่งคำตอบ และรับรีวิวโค้ดจาก AI
เลือกตามหัวข้อ
เรียน C และ C++ ควบคู่กันด้วยโค้ดจริง output โมเดลหน่วยความจำ โครงสร้างข้อมูล อัลกอริทึม และ C++ สมัยใหม่
💻 เกี่ยวกับตัวรัน C++ ออนไลน์นี้
ตัวรัน C++ ของ CodeUtility ช่วยให้คุณเขียนและรันโค้ด C++ ได้โดยตรงในเบราว์เซอร์ของคุณ - ไม่ต้องติดตั้งหรือเซ็ตอัพคอมไพเลอร์ใดๆ ใช้งานบนแซนด์บ็อกซ์ที่ปลอดภัย รองรับมาตรฐาน C++ จริง ตั้งแต่ C++11, C++14, C++17 ไปจนถึงเวอร์ชัน ล่าสุด
เครื่องมือนี้ใช้คอมไพเลอร์ C++ จริงที่รันบนคลาวด์เพื่อคอมไพล์และรันโค้ดของคุณ ช่วยให้พฤติกรรมถูกต้องและสม่ำเสมอ ในแต่ละเวอร์ชัน คุณสามารถทดลองแนวคิดพื้นฐานของ C++ ได้อย่างอิสระ เช่น ตัวแปร ฟังก์ชัน ลูป เงื่อนไข และการเขียนโปรแกรมเชิงวัตถุ
ไม่ว่าคุณจะเตรียมตัวสัมภาษณ์ เรียนรู้ฟีเจอร์ C++ สมัยใหม่ หรือยืนยันตรรกะของอัลกอริทึม ตัวรัน C++ ของ CodeUtility มอบสภาพแวดล้อมที่เรียบง่ายแต่ทรงพลัง ให้คุณรันโค้ดได้ทันทีจากทุกอุปกรณ์
มากกว่าเครื่องมือรันโค้ด
ใช้ตัวแก้ไขหลายไฟล์ เทอร์มินัลประมวลผลแบบแยกส่วน ไลบรารีเฉพาะรันไทม์ พื้นที่ทำงานถาวร การแชร์ และการทำงานร่วมกันแบบเรียลไทม์ได้จากตัวประมวลผลเดียวกัน
วิธีใช้ตัวประมวลผลนี้
เลือกรันไทม์ เปิดหรือสร้างไฟล์ เขียนโค้ด แล้วเลือกเรียกใช้ ผลลัพธ์จะแสดงในเทอร์มินัล ส่วนผู้ใช้ที่ลงชื่อเข้าใช้สามารถเก็บไฟล์ในพื้นที่ทำงาน ติดตั้งไลบรารี และทำงานร่วมกันผ่านการแชร์ได้
- เลือกเวอร์ชันแล้วแก้ไขไฟล์ปัจจุบัน หรือเปิดไฟล์อื่นในพื้นที่ทำงาน
- เรียกใช้โค้ด ป้อนข้อมูลในเทอร์มินัลเมื่อระบบร้องขอ และตรวจสอบประวัติการเรียกใช้ที่บันทึกไว้
- ใช้ไลบรารี เครื่องมือพื้นที่ทำงาน การแชร์ และแชท เมื่องานของคุณต้องใช้โค้ดมากกว่าหนึ่งส่วน
💡 พื้นฐาน C++ และตัวอย่างที่ลองได้ด้านบน
1. ประกาศตัวแปรและค่าคงที่
C++ ต้องประกาศชนิดข้อมูลของตัวแปรทุกตัว ใช้ const เพื่อกำหนดค่าที่อ่านอย่างเดียว ซึ่งไม่สามารถเปลี่ยนได้หลังจากกำหนดค่าเริ่มต้นแล้ว
int age = 30;
double pi = 3.14159;
char grade = 'A';
std::string name = "Alice";
bool isActive = true;
// ค่าคงที่
const int MAX_USERS = 100;
const std::string COMPANY = "CodeUtility";
// การพยายามแก้ไขตัวแปร const จะทำให้เกิดข้อผิดพลาดขณะคอมไพล์
// MAX_USERS = 200; // ❌ ข้อผิดพลาด
2. เงื่อนไข (if / switch)
ใช้ if, else if, else เพื่อแตกแขนงเงื่อนไข ใช้ switch เมื่อมีหลายค่า
int x = 2;
if (x == 1) {
std::cout << "หนึ่ง\n";
} else if (x == 2) {
std::cout << "สอง\n";
} else {
std::cout << "อื่นๆ\n";
}
// สวิตช์-เคส
switch (x) {
case 1:
std::cout << "หนึ่ง\n";
break;
case 2:
std::cout << "สอง\n";
break;
default:
std::cout << "อื่นๆ\n";
}
3. ลูป
ใช้ for, while และ do-while เพื่อทำซ้ำบล็อกโค้ด
for (int i = 0; i < 3; i++) {
std::cout << i << "\n";
}
int n = 3;
while (n > 0) {
std::cout << n << "\n";
n--;
}
4. อาร์เรย์
อาร์เรย์เก็บหลายองค์ประกอบที่มีชนิดเดียวกัน
int numbers[3] = {10, 20, 30};
std::cout << numbers[1] << "\n";
5. การจัดการอาร์เรย์/เวกเตอร์
ใช้ std::vector สำหรับอาร์เรย์แบบขยายขนาดได้
#include <vector>
std::vector nums = {1, 2, 3};
nums.push_back(4);
nums.pop_back();
for (int n : nums) {
std::cout << n << " ";
}
6. การรับ/ส่งข้อมูลผ่านคอนโซล
ใช้ std::cin สำหรับรับข้อมูล และใช้ std::cout สำหรับแสดงผล
std::string name;
std::cout << "ป้อนชื่อของคุณ: ";
std::cin >> name;
std::cout << "สวัสดี, " << name << "\n";
7. ฟังก์ชัน
ฟังก์ชันช่วยจัดกลุ่มลอจิกที่นำกลับมาใช้ซ้ำได้ ระบุพารามิเตอร์และชนิดค่าที่ส่งกลับ
int add(int a, int b) {
return a + b;
}
std::cout << add(3, 4);
8. Map
std::map เก็บคู่คีย์-ค่า คล้ายพจนานุกรม
#include <map>
std::map ages;
ages["Alice"] = 30;
std::cout << ages["Alice"];
9. การจัดการข้อยกเว้น
ใช้ try และ catch เพื่อจัดการข้อผิดพลาดขณะรัน
try {
throw std::runtime_error("เกิดข้อผิดพลาด");
} catch (const std::exception& e) {
std::cout << e.what();
}
10. การทำงานกับไฟล์ (File I/O)
ใช้ fstream เพื่ออ่านและเขียนไฟล์
#include <fstream>
std::ofstream out("file.txt");
out << "สวัสดีไฟล์";
out.close();
std::ifstream in("file.txt");
std::string line;
getline(in, line);
std::cout << line;
in.close();
11. การจัดการสตริง
สตริงใน C++ รองรับเมธอดอย่าง length(), substr() และ find()
std::string text = "สวัสดีชาวโลก";
std::cout << text.length();
std::cout << text.substr(0, 5);
std::cout << text.find("ชาวโลก");
12. คลาสและอ็อบเจ็กต์
C++ รองรับการเขียนโปรแกรมเชิงวัตถุด้วยคลาส
class Person {
public:
std::string name;
Person(std::string n) : name(n) {}
void greet() { std::cout << "สวัสดี ฉันชื่อ " << name; }
};
Person p("Alice");
p.greet();
13. พอยน์เตอร์
พอยน์เตอร์เก็บที่อยู่หน่วยความจำของตัวแปรอีกตัว ใช้ & เพื่อรับที่อยู่
และใช้ * เพื่อ dereference (เข้าถึงค่าที่ตำแหน่งนั้น)
int x = 10;
int* ptr = &x;
std::cout << "ค่าของ x: " << x << "\n";
std::cout << "ที่อยู่ของ x: " << ptr << "\n";
std::cout << "ค่าจากพอยน์เตอร์: " << *ptr << "\n";
// แก้ไข x ผ่านพอยน์เตอร์
*ptr = 20;
std::cout << "อัปเดต x: " << x << "\n";
🐞 วิธีดีบักโค้ด %{language} ออนไลน์
ใช้ดีบักเกอร์ %{language} ออนไลน์เพื่อค้นหาข้อผิดพลาด runtime และ logic โดยไม่ต้องติดตั้งคอมไพเลอร์หรือ IDE โหมดเซิร์ฟเวอร์จะคอมไพล์พร้อม debug symbols และรันด้วย GDB
- ตั้ง breakpoint ข้างหมายเลขบรรทัด
- เลือก Debug เพื่อคอมไพล์และหยุดที่ breakpoint แรก
- ตรวจสอบบรรทัด call stack และตัวแปร
- ใช้ Continue, Step Over, Step Into หรือ Step Out
- เลือก Stop เพื่อจบการดีบัก
เริ่มจากตัวอย่างขนาดเล็กที่ทำให้เกิดปัญหาได้ และตั้ง breakpoint ก่อนพฤติกรรมที่ไม่คาดคิด