Tensorflow实战:断点续训与手写数字识别

需积分: 12 2 下载量 96 浏览量 更新于2024-09-07 收藏 1.48MB PDF 举报
本篇文章是关于Tensorflow机器学习课程的第六讲笔记,主要聚焦于全连接网络在实际应用中的两个核心环节:断点续训和图像识别。以下是详细的知识点解析: 1. 断点续训: - **理解关键步骤**:在Tensorflow中,通过`tf.train.get_checkpoint_state(MODEL_SAVE_PATH)`函数检查是否存在有效的断点文件。这个函数接受一个路径参数,如果找到断点文件,会返回一个包含模型状态的`CheckpointState`对象。`saver.restore(sess,ckpt.model_checkpoint_path)`则是用来恢复会话,将之前保存的模型权重(w和b)加载到当前会话中。`ckpt.model_checkpoint_path`自动查找最近的模型文件名,无需硬编码。 2. 实践代码与验证: - 输入阶段:实际应用中,输入是一张28x28的手写数字图片,将其转化为一维数组,每个像素点表示0到1之间的灰度值。例如,一个测试图片的输入可能表示为`input:1x784`,其中784是28x28图像的像素总数。 - **预处理函数**:`pre_pic(testPic)`负责将图片转换为一维数组,通常包括读取图片、归一化等步骤。 - **预测输出**:网络的输出是一个包含10个元素的概率数组,每个元素代表对应数字的可能性。最大概率对应的索引即为预测的数字。例如,`preValue=restore_model(testPicArr)`这部分代码调用预训练模型对输入图片进行预测,并将结果存储在`preValue`变量中。 3. 实际应用示例: - 用户交互式编程:通过用户输入测试图片的数量(`testNum`)和每个图片的路径,然后依次读取并处理图片,利用已训练好的模型进行预测,最后输出预测的数字。 通过这个笔记,读者可以学习如何在Tensorflow中实现全连接网络的训练中断点保存和恢复,以及如何将模型应用于实际的图像识别任务,提高模型的实用性。这不仅有助于理论知识的学习,还能提升动手实践的能力,对深入理解人工智能和机器学习技术有极大的帮助。
2023-05-31 上传

#include <iostream> #include <cstring> using namespace std; class Date { public: int year; int month; int day; Date() {year = 1900; month = 1; day = 1;} Date(int y, int m, int d) : year(y), month(m), day(d) {} // Date(const Date& b) {year = b.year; month = b.month; day = b.day;} }; class people { char name[11]; char number[7]; char sex[3]; Date birth; char id[16]; public: char* getName() {return name;} char* getNumber() {return number;} char* getSex() {return sex;} Date getBirth() {return birth;} char* getId() {return id;} people() {} people(char* nm, char* no, char* gd, Date b, char* i) : birth(b) { strcpy(name, nm); strcpy(number, no); strcpy(sex, gd); strcpy(id, i); } }; class teacher : virtual public people { char principalship[11]; char department[21]; public: char* getPs() {return principalship;} char* getDpm() {return department;} teacher() {} teacher(char* ps, char* dpm) { strcpy(principalship, ps); strcpy(department, dpm); } teacher(char* nm, char* no, char* gd, Date b, char* i, char* ps, char* dpm) : people(nm, no, gd, b, i) { strcpy(principalship, ps); strcpy(department, dpm); } }; class student : virtual public people { char classNO[7]; public: char* getClassNO() {return classNO;} student() {} student(char* cln) {strcpy(classNO, cln);} student(char* nm, char* no, char* gd, Date b, char* i, char* cln) : people(nm, no, gd, b, i) { strcpy(classNO, cln); } }; class graduate : public student { char subject[21]; teacher adviser; public: char* getSubject() {return subject;} teacher getAdviser() {return adviser;} graduate() {} graduate(char* sbj, teacher adv) : adviser(adv) {strcpy(subject, sbj);} graduate(char* cln, char* sbj, teacher adv) : student(cln), adviser(adv) {strcpy(subject, sbj);} graduate(char* nm, char* no, char* gd, Date b, char* i, char* cln, char* sbj, teacher adv) : student(nm, no, gd, b, i, cln), adviser(adv) {strcpy(subject, sbj);} }; class TA : public graduate, public teacher { public: TA() {} TA(char* nm, char* no, char* gd, Date b, char* i, char* ps, char* dpm, char* cln, char* sbj, teacher adv) : people(nm, no, gd, b, i), teacher(ps, dpm), graduate(cln, sbj, adv) {} }; int main() { /********** Begin **********/ /********** End **********/ cout << "TA name: " << ta.getName() << endl; cout << "No.: " << ta.getNumber() << endl; cout << "Department: " << ta.getDpm() << endl; cout << "Class No.: " << ta.getClassNO() << endl; cout << "Subject: " << ta.getSubject() << endl; cout << "Advisor: " << ad.getName() << endl; return 0; }

2023-05-25 上传