Wikibooks zhwikibooks https://zh.wikibooks.org/wiki/Wikibooks:%E9%A6%96%E9%A1%B5 MediaWiki 1.45.0-wmf.9 first-letter Media Special Talk User User talk Wikibooks Wikibooks talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Transwiki Transwiki talk Wikijunior Wikijunior talk Subject Subject talk TimedText TimedText talk Module Module talk Template:计算机科学与技术书架 10 7556 181643 179583 2025-07-11T03:09:05Z AromaTake 63200 /* File:Wikibooks library icon computer.svg 電腦科學與技術書架 */ 調整內部連結 181643 wikitext text/x-wiki -{H|zh-cn:计算机; zh-hk:電腦; zh-tw:電腦;}- -{H|zh-cn:网络; zh-hk:網路; zh-tw:網路;}- -{H|zh-cn:操作系统; zh-hk:作業系統; zh-tw:作業系統;}- -{H|zh-cn:程序; zh-hk:程式; zh-tw:程式;}- == [[File:Wikibooks library icon computer.svg]] [[Template:计算机科学与技术书架|電腦科學與技術書架]] == <big>'''電腦基础'''</big> <div style="{{column-count|3}}"> * [[计算机组成原理]] {{stage|00%}} * [[计算机系统结构]] {{stage|25%}} * [[单片机原理及应用]] {{stage|00%}} </div> <big>'''網路'''</big> <div style="{{column-count|3}}"> * [[計算機網路概論]] {{stage|00%}} * [[计算机网络]] {{stage|00%}} * [[网路交流方式介绍]] {{stage|00%}} * [[Wiki]] {{stage|25%}} * [[Asterisk权威指南]] {{stage|25%}} * [[Networked Media Tank]] {{stage|75%}} * [[Web2.0和新興學習技術]] {{stage|50%}} * [[維基講師手冊]] {{stage|00%}} </div> <big>'''電腦安全'''</big> <div style="{{column-count|3}}"> * [[網站安全]] {{stage|00%}} * [[軟體安全]] {{stage|00%}} </div> <big>'''系統維護'''</big> <div style="{{column-count|3}}"> </div> <big>'''操作系统'''</big> <div style="{{column-count|3}}"> * [[Windows 98]] {{stage|25%}} * [[Windows NT]] {{stage|25%}} * [[Windows 2000]] {{stage|25%}} * [[Windows XP]] {{stage|25%}} * [[Windows Vista]] {{stage|25%}} * [[Windows 7]] {{stage|25%}} * [[Windows 8]] {{stage|25%}} * [[Windows 10]] {{stage|00%}} * [[Windows 11]] {{stage|00%}} * [[Solaris 10]] {{stage|50%}} * [[Open Solaris]] {{stage|00%}} * [[Linux]] {{stage|25%}} * [[Linux 实战]] * [[Ubuntu]] {{stage|50%}} * [[Fedora]] {{stage|00%}} * [[Debian]] {{stage|25%}} * [[openSUSE]] {{stage|50%}} * [[Unix:Mac OS X]] </div> <big>'''多媒体'''</big> <div style="{{column-count|3}}"> * [[多媒体技术]] {{stage|00%}} * [[虚拟现实]] {{stage|00%}} </div> <big>'''计算机语言与程序设计'''</big> <div style="{{column-count|3}}"> * [[编程语言列表]] {{stage|50%}} * [[程序设计]] {{stage|25%}} * [[软件工程]] {{stage|25%}} * [[X86组合语言]] {{stage|50%}} * [[C语言|C语言]] {{stage|25%}} * [[C Sharp|C#语言]] {{stage|00%}} * [[C++|C++语言]] {{stage|25%}} * [[Java]] {{stage|50%}} * [[J2EE]] {{stage|00%}} * [[Lisp 入门]] {{stage|75%}} * [[Eclipse 编程]] {{stage|00%}} * [[BOO]] {{stage|100%}} * [[Haskell]] {{stage|25%}} * [[Android]] {{stage|25%}} * [[Pascal]] {{stage|00%}} * [[PHP]] {{stage|50%}} * [[PHP_BIBLE|PHP BIBLE]]{{stage|00%}} * [[Python]] {{stage|25%}} * [[Ruby Programming]] {{stage|75%}} * [[HTML]] {{stage|00%}} * [[JavaScript]] {{stage|50%}} * [[XML]] {{stage|25%}} * [[指针]] {{stage|50%}} * [[GNU make]] {{stage|25%}} * [[GSL(GNU Scientific Library)参考手册]] {{stage|25%}} * [[Tcl 編程]] * [[NOIP初赛指南]] {{stage|25%}} * [[Pywikibot]] {{stage|00%}} * [[正则表达式]] {{stage|00%}} * [[算法实现]]{{stage|00%}} * [[TensorFlow]]{{stage|50%}} * [[FreeBASIC]]{{stage|00%}} * [[Scheme入门]]{{stage|00%}} * [[Racket]] </div> <big>'''编码'''</big> <div style="{{column-count|3}}"> * [[Unicode]] {{stage|50%}} </div> <big>'''伺服器'''</big> <div style="{{column-count|3}}"> * [[zope]] {{stage|00%}} * [[Asterisk权威指南]] {{stage|25%}} </div> <big>'''應用程式'''</big> '''开源程序''' <div style="{{column-count|3}}"> * [[GNU make|GNU make 手册]] * [[OpenSSH]] * [[Git]] </div> '''数据库''' <div style="{{column-count|3}}"> * [[MySQL]] * [[MariaDB]] * [[PostgressQL]] * [[SQLlite]] </div> '''文書處理''' <div style="{{column-count|3}}"> * [[Microsoft Office]] {{stage|00%}} * [[OpenOffice.org]] {{stage|25%}} * [[LibreOffice]] {{stage|00%}} * [[LaTeX]] {{stage|25%}} </div> '''文本编辑''' <div style="{{column-count|3}}"> * [[Vi文件編輯器]]{{stage|25%}} * [[vim]] {{stage|25%}} </div> '''網絡瀏覽''' <div style="{{column-count|3}}"> * [[Google Chrome]] {{stage|25%}} </div> '''網絡通訊''' <div style="{{column-count|3}}"> * [[Skype]] {{stage|25%}} * [[IRC]] {{stage|25%}}<br> </div> '''影音娛樂''' <div style="{{column-count|3}}"> * [[FL Studio]] {{stage|00%}} </div> '''繪圖剪輯''' <div style="{{column-count|3}}"> * [[CAD]] {{stage|25%}} * [[GIMP]] {{stage|25%}} * [[Inkscape基本操作]] {{stage|25%}}<br> </div> '''3D动画''' <div style="{{column-count|3}}"> * [[Blender 3D︰從入門到精通]] {{stage|50%}}<br> </div> '''工程软件''' <div style="{{column-count|3}}"> * [[AutoCAD]] {{stage|00%}} * [[LibreCAD]] {{stage|00%}} * [[UG NX]] {{stage|00%}} * [[FreeCAD]] {{stage|25%}} * [[Solidworks]] {{stage|00%}} * [[Autodesk Inventor]] {{stage|00%}} * [[Altium Designer]] {{stage|00%}} </div> '''科学计算与仿真''' <div style="{{column-count|3}}"> * [[GNU Octave]] {{stage|25%}} * [[Matlab]] {{stage|00%}} * [[Maple]] {{stage|50%}} * [[BOINC]] {{stage|00%}} * [[SAS]]{{stage|00%}} * [[Mathematica]]{{stage|25%}} * [[R]]语言{{stage|25%}} <br> </div> '''商业分析''' <div style="{{column-count|3}}"> * [[GNU PSPP]] {{stage|25%}} * [[SPSS]] {{stage|00%}} * [[Vensim]] {{stage|00%}} <br> </div> '''游戏设计与研究''' <div style="{{column-count|3}}"> * [[Unity]] {{stage|00%}} </div> '''系統設計與研發''' <div style="{{column-count|3}}"> * [[系統分析與設計]] {{stage|00%}} </div> '''输入法''' <div style="{{column-count|3}}"> * [[倉頡輸入法]] {{stage|00%}} </div> <big>'''嵌入式系统'''</big> <div style="{{column-count|3}}"> * [[Arduino]] {{Stage|25%}} * [[Raspberry Pi]] {{Stage|25%}} * [[嵌入式系统]] {{Stage|25%}} </div> <big>'''其他'''</big> <div style="{{column-count|3}}"> * [[大陆台湾计算机术语对照表|大陆台湾電腦术语对照表]] {{stage|50%}} * [[ Erlang程式設計與問題解決]]{{stage|50%}} </div> <div align="right">'''[[Subject:計算機科學|所有计算机科学与技术教科书...]]'''</div> oyzepis01883elu51bkxn1kbjxb5j1l 如何编写autorun脚本 0 12311 181638 78640 2025-07-11T02:28:10Z AromaTake 63200 /* 自动清除各盘Autorun.inf的批处理 */ 調整格式、排版 181638 wikitext text/x-wiki ==一个微软Windows系统下的Autorun.inf文件例子== 新建一个纯文本文档,即.txt文件,写入以下内容: [AutoRun] open=setup.exe shellexecute=setup.exe shell\Auto\command=setup.exe 保存后改.txt后缀名为.inf,可以将该文件[[刻录]]入[[光盘]]中,那么打开光盘盘符播放时会自动执行setup.exe ==自动清除各盘Autorun.inf的批处理== 新建一个纯文本文档,即.txt文件,写入以下内容: <syntaxhighlight lang=bat> FOR %%a IN ( C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO ATTRIB -R -H -S -A %%a\setup.EXE & DEL /F /Q /A -R -H -S -A %%a\setup.EXE & ATTRIB -R -H -S -A %%a\AUTORUN.INF & DEL /F /Q /A -R -H -S -A %%a\AUTORUN.INF </syntaxhighlight> 保存后改.txt后缀名为.bat,然后直接双击此bat[[批处理]]文件运行,会自动删除各盘的autorun.inf以及setup.EXE文件,无需手工一个一个的删除。 == 外部链接 == {{wikipedia|Autorun}} [[分類:Windows]] 1ndf4wn4h8og4gv3np8ngvnpe5h9iv5 Category:Linux 14 17171 181639 50732 2025-07-11T02:36:49Z AromaTake 63200 removed [[Category:Linux]]; added [[Category:操作系统]] using [[Help:Gadget-HotCat|HotCat]]。移除遞迴分類迴圈 181639 wikitext text/x-wiki [[Category:操作系统]] 7ncd0nsgjaoxtcmva655jscqgqh8av5 C++/STL/ConditionVariable 0 22440 181647 168535 2025-07-11T07:02:17Z AromaTake 63200 調整格式、排版 181647 wikitext text/x-wiki '''condition_variable''' 是[[w:C++標準程式庫|標準程式庫]]中的一個[[w:头文件|头文件]],定义了[[w:C++11|C++11]]标准中的一些用于[[w:并发计算|并发编程]]时表示[[w:条件变量|条件变量]]的类与方法等。从[[w:g++|g++]] 4.8.1、[[w:Visual C++|Visual C++]] 2012都已经支持了C++11标准中定义的condition_variable头文件。 ==背景简介== [[w:条件变量|条件变量]]是[[w:并发程序|并发程序设计]]中的一种控制结构。多个[[w:线程|线程]]访问一个共享资源(或称[[w:临界区|临界区]])时,不但需要用[[w:互斥锁|互斥锁]]实现独享访问以避免并发错误(称为[[w:竞争危害|竞争危害]]),在获得互斥锁进入临界区后还需要检验特定条件是否成立: *如果不满足该条件,拥有互诉锁的线程应该释放该互斥锁、把自身阻塞(block)并挂到(suspend)条件变量的线程队列中; *如果满足该条件,拥有互诉锁的线程在临界区内访问共享资源,在退出临界区时通知(notify)在条件变量的线程队列中处于阻塞状态的线程,被通知的线程必须重新申请对该互斥锁加锁。 如上,实际上使用了两个处于阻塞状态的线程的队列,分别为条件变量与互斥锁所拥有。 [[w:C++11|C++11]]的标准库中新增加的条件变量的实现,与[[w:pthread|pthread]]的实现语义完全一致。 使用条件变量做并发控制时,某一时刻阻塞在一个条件变量上的各个线程应该在调用wait操作时指明同一个互斥锁,此时该条件变量与该互斥锁绑定;否则程序的行为未定义。条件变量必须与互斥锁配合使用,其理由是程序需要判定某个条件(condition或称predict)是否成立,该条件可以是任意复杂。通行的编程样例为([[w:伪代码|伪代码]]): <syntaxhighlight lang="cpp"> mutex.lock();//互斥锁加锁 while(predict()!=true) // predict可以任意复杂,但必须互斥独占访问 conditionVariable.wait(); //退出while循环执行至此时,既有predict()为真且获得了mutex加锁 </syntaxhighlight> 离开临界区的线程用notify操作解除阻塞(unblock)在条件变量上的各个线程时,按照公平性(fairness)这些线程应该有平等的获得互斥锁的机会,不应让某个线程始终难以获得互斥锁被饿死(starvation),并且比后来到临界区的其它线程更为优先(即基本上FIFO)。一种办法是调用了notify_all的线程保持互斥锁,直到所有从条件变量上解除阻塞的线程都已经挂起(suspend)到互斥锁上,然后发起了notify_all的线程再释放互斥锁。<ref>[http://www.cs.wustl.edu/~schmidt/win32-cv-1.html Douglas C. Schmidt and Irfan Pyarali:《Strategies for Implementing POSIX Condition Variables on Win32》&sect;3.4. The SignalObjectAndWait Solution]</ref>互斥锁上一般都有比较完善的阻塞线程调度算法,一般会按照线程优先级调度,相同优先级按照FIFO调度。 发起notify的线程不需要拥有互斥锁。 即将离开临界区的线程是先释放互斥锁还是先notify操作解除在条件变量上挂起线程的阻塞?表面看两种顺序都可以。但一般建议是先notify操作,后对互斥锁解锁。因为这既有利于上述的公平性,同时还避免了相反顺序时可能的[[w:优先级倒置]]。这种先notify后解锁的做法是悲观的(pessimization),因为被通知(notified)线程将立即被阻塞,等待通知(notifying)线程释放互斥锁。很多实现(特别是pthreads的很多实现)为了避免这种“匆忙与等待”(hurry up and wait)情形,把在条件变量的线程队列上处于等待的被通知线程直接移到互斥锁的线程队列上,而不唤醒这些线程。 ==std::condition_variable类== std::condition_variable类表示[[w:条件变量]]。效果上相当于包装了[[w:pthread]]库中的pthread_cond_*()系列的函数。 *构造函数 **condition_variable();缺省构造函数 **condition_variable (const condition_variable&) = delete;禁止拷贝构造函数 *成员函数 **void wait (unique_lock<mutex>& lck); 无条件被阻塞。调用该函数前,当前线程应该已经对unique_lock<mutex> lck完成了加锁。所有使用同一个条件变量的线程必须在wait函数中使用同一个unique_lock<mutex>。该wait函数内部会自动调用lck.unlock()对互斥锁解锁,使得其他被阻塞在互斥锁上的线程恢复执行。使用本函数被阻塞的当前线程在获得通知(notified,通过别的线程调用 notify_*系列的函数)而被唤醒后,wait()函数恢复执行并自动调用lck.lock()对互斥锁加锁。 **template <class Predicate> void wait (unique_lock<mutex>& lck, Predicate pred);带条件的被阻塞。wait函数设置了谓词(Predicate),只有当pred条件为false时调用该wait函数才会阻塞当前线程,并且在收到其他线程的通知后只有当pred为true时才会被解除阻塞。因此,等效于<code>while (!pred()) wait(lck);</code> **template <class Rep, class Period> cv_status wait_for (unique_lock<mutex>& lck, const chrono::duration<Rep,Period>& rel_time);指定一个时间段,在当前线程收到通知(notify)或者超过指定时间段,wait_for 返回 **template <class Rep, class Period, class Predicate> bool wait_for (unique_lock<mutex>& lck, const chrono::duration<Rep,Period>& rel_time, Predicate pred); 有条件阻塞且超时返回。 **template <class Clock, class Duration> cv_status wait_until (unique_lock<mutex>& lck, const chrono::time_point<Clock,Duration>& abs_time);指定一个绝对时间点,超时wait_until返回。 **template <class Clock, class Duration, class Predicate> bool wait_until (unique_lock<mutex>& lck, const chrono::time_point<Clock,Duration>& abs_time, Predicate pred);有条件阻塞且超时返回。 **notify_one():唤醒某个等待线程,该线程是通过该条件变量的某个wait函数阻塞在该条件变量的线程队列上。如果当前没有等待线程,则该函数什么也不做 **notify_all():唤醒所有的等待(wait)线程。如果当前没有等待线程,则该函数什么也不做。 ==std::condition_variable_any类== 与std::condition_variable用法一样,区别仅在于std::condition_variable_any 的 wait 函数可以接受任何 lockable 参数,而 std::condition_variable 只能接受 std::unique_lock<std::mutex> 类型的参数。 ==std::cv_status枚举类型== *std::cv_status::no_timeout: wait_for 或者 wait_until 没有超时即返回,即在规定的时间段内线程收到了通知。 *std::cv_status::timeout: wait_for 或者 wait_until 超时后返回。 ==函数std::notify_all_at_thread_exit()== 函数原型为: <syntaxhighlight lang="cpp"> void notify_all_at_thread_exit (condition_variable& cond, unique_lock<mutex> lck); </syntaxhighlight> 当调用该函数的线程退出时,所有在 cond 条件变量上等待的线程都会收到通知。Microsoft Visual C++ 2013已经支持了该函数;但GCC 4.9.3尚未支持该函数。 ==例子程序== <syntaxhighlight lang="cpp"> #include <iostream> #include <string> #include <thread> #include <mutex> #include <condition_variable> std::mutex m; std::condition_variable cv; std::string data; bool ready = false; bool processed = false; void worker_thread() { // 等待主线程设置好ready变量为真 std::unique_lock<std::mutex> lk(m); cv.wait(lk, []{return ready;}); //或者为 cv.wait(lk); // 现在拥有了互斥锁m,变量ready为真,已进入了临界区 std::cout << "Worker thread is processing data\n"; data += " after processing"; // Send data back to main() processed = true; std::cout << "Worker thread signals data processing completed\n"; // 手工解锁,并通知阻塞在cv上的某个线程。 cv.notify_one(); lk.unlock(); } int main() { std::thread worker(worker_thread); //启动工作线程 data = "Example data"; //把ready变量由false变为true,这使得工作线程进入临界区 { std::lock_guard<std::mutex> lk(m); //由于工作线程不可能更早得到ready为真,所以主线程很快就会获得互斥锁m ready = true; std::cout << "main() signals data ready for processing\n"; } cv.notify_one(); //通知已经阻塞在cv上的某个线程;如果没有线程被阻塞,则什么也不做 // 等待工作线程——主线程需要获得互斥锁m且processed变量变为真 { std::unique_lock<std::mutex> lk(m); cv.wait(lk, []{return processed;}); } std::cout << "Back in main(), data = " << data << '\n'; worker.join(); } </syntaxhighlight> ==示例:实现信号量== <syntaxhighlight lang="cpp"> #include <mutex> #include <condition_variable> class Semaphore { public: Semaphore (int count_ = 0) : count(count_) {} inline void notify() { std::unique_lock<std::mutex> lock(mtx); count++; cv.notify_one(); } inline void wait() { std::unique_lock<std::mutex> lock(mtx); while(count == 0){ cv.wait(lock); } count--; } private: std::mutex mtx; std::condition_variable cv; int count; }; </syntaxhighlight> ==参考文献== <references/> 12xe5x4aix15it161yqlnkfa3q5xa2q Template:C sharp 10 26248 181646 106697 2025-07-11T06:22:28Z AromaTake 63200 source改用syntaxhighlight、enclose="none"改用inline="true" 181646 wikitext text/x-wiki {{#tag:syntaxhighlight|{{{1}}}|lang="csharp"|inline="true"}} 7k3oywoxsjbywsqdfaunhowjuck26sg JavaScript/匿名函数和闭包 0 26341 181645 133969 2025-07-11T05:53:53Z AromaTake 63200 調整格式、排版 181645 wikitext text/x-wiki ==匿名函数== 匿名函数是一种没有函数名的函数。 在 Javascript 中,有时我们定义函数为 <syntaxhighlight lang="javascript"> function(){ //some code } </syntaxhighlight> 这种定义经常出现在向某些函数传递回调函数的场景下,由于回调函数使用一次后就会销毁(离开调用者作用域),函数名就变得多余。 或者定义为 <syntaxhighlight lang="javascript"> (function(){ //some code })() </syntaxhighlight> 这种定义实际上定义了一个匿名函数且只执行一次, 主要用于提供局部变量的作用域 以上两种均为'''匿名函数''' ==闭包== 闭包指的是函数的局部变量不与外界共享的语法特性。如下例: <syntaxhighlight lang="javascript"> var a=1; function outerFunction(){ var a=2;   console.log("函数内的a=" + a); } outerFunction(); console.log("函数外的a=" + a); </syntaxhighlight> 输出: <pre> 函数内的a=2 函数外的a=1 </pre> 之前提到过JavaScript中的函数也是对象,那么能不能将函数作为对象返回呢?答案是可以。 作为返回值的函数,可以将函数内部的值传递到外部。如下例: <syntaxhighlight lang="javascript"> var a=1; function outerFunction(){ var a=2;   console.log("函数内的a=" + a); return function(){       console.log("返回值函数访问的a=" + a); } } var innerFunction=outerFunction(); innerFunction(); console.log("函数外的a=" + a); </syntaxhighlight> 输出: <pre> 函数内的a=2 返回值函数访问的a=2 函数外的a=1 </pre> eh8o9upfr0k7jlqylzj4xxi9g9lcthn Python/TensorFlow 0 28326 181648 179592 2025-07-11T07:06:12Z AromaTake 63200 /* 例子 */ 調整格式、排版 181648 wikitext text/x-wiki '''TensorFlow'''是一个开源软件库,用于各种机器学习与数据处理任务。TensorFlow最初由谷歌公司的大脑团队开发,用于Google的研究和生产,于2015年11月9日在Apache 2.0开源许可证下发布。 在Python中需要首先导入包: import tensorflow as tf ==概念== * TensorFlow是采用'''数据流图'''(data flow graphs)来描述了计算的过程。 * 图中的节点(Nodes)被称之为 op (operation 的缩写),用来表示施加的计算任务,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。一个 op 获得 0 个或多个 tensor,执行计算产生 0 个或多个张量tensor,每个tensor是一个类型化的多维数组。 **源 op (source op)不需要任何输入,例如 常量 (Constant)。 * 线(edges)则表示在节点间相互联系的多维数据数组(即张量)。在Python中,节点赋值给一个名字,该名字对应的类型为ensorflow.python.framework.ops.Tensor,即表示这个节点输出的张量。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行计算。 * 为了进行计算,图必须在被称之为 会话 (Session) 的上下文 (context) 中执行。Session 将图的 op 分发到诸如 CPU 或 GPU 之类的设备上,同时提供执行 op 的方法。这些方法执行后,将产生的 tensor 返回。 * 变量 (Variable) 用于维护状态 * feed机制可以用一个 tensor 值临时替换图中的任意节点的输出tensor;还可以直接插入一个 tensor。feed数据作为 Session 对象的run() 调用的参数。feed 只在调用它的方法内有效,方法结束,feed 就会消失。 * fetch:为了取回操作的输出内容,使用 Session 对象的 run() 调用执行图时,传入一些(节点的输出)tensor,,则run()返回其计算结果。在 Python 语言中, tf.Session的run返回的tensor是 numpy.ndarray 对象;在 C 和 C++ 语言中,返回的 tensor 是 tensorflow::Tensor 实例。Session需要close()释放。 ==交互式运行环境== 可以使用 InteractiveSession 代替 Session 类,使用 Tensor.eval() 和 Operation.run() 方法代替 Session.run(). <syntaxhighlight lang="python"> # 进入一个交互式 TensorFlow 会话. import tensorflow as tf sess = tf.InteractiveSession() x = tf.Variable([1.0, 2.0]) a = tf.constant([3.0, 3.0]) # 使用初始化器 initializer op 的 run() 方法初始化 'x' x.initializer.run() # 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果 sub = tf.subtract(x, a) print (sub.eval()) </syntaxhighlight> ==TensorBoard可视化数据流图== <syntaxhighlight lang="python"> import tensorflow as tf a = tf.constant(2, name="a") b = tf.constant(2, name="b") x = tf.add(a, b, name="add") with tf.Session() as sess: writer = tf.summary.FileWriter('D:\\tmp', sess.graph) # if you prefer creating your writer using session's graph print(sess.run(x)) writer.close() </syntaxhighlight> 然后在cmd运行程序 $ python3 [my_program.py] $ tensorboard --logdir="\tmp" --port 6006 在浏览器打开 http://ThisComputerName:6006/ ==成员函数== ===常量=== num = tf.constant(2, name="num") # constant of 1d tensor (vector) a = tf.constant([2, 2], name="vector") # constant of 2x2 tensor (matrix) b = tf.constant([[0, 1], [2, 3]], name="matrix") # create a tensor of shape and all elements are zeros tf.zeros([2, 3], tf.int32) ==> [[0, 0, 0], [0, 0, 0]] # create a tensor of shape and type (unless type is specified) as the input_tensor but all elements are zeros. input_tensor [[0, 1], [2, 3], [4, 5]] tf.zeros_like(input_tensor) ==> [[0, 0], [0, 0], [0, 0]] # create a tensor of shape and all elements are ones tf.ones([2, 3], tf.int32) ==> [[1, 1, 1], [1, 1, 1]] # input_tensor is [[0, 1], [2, 3], [4, 5]] tf.ones_like(input_tensor) ==> [[1, 1], [1, 1], [1, 1]] # create a tensor filled with a scalar value. tf.fill([2, 3], 8) ==> [[8, 8, 8], [8, 8, 8]] #tf.lin_space(start, stop, num, name=None) # create a sequence of num evenly-spaced values are generated beginning at start. If num > 1, the values in the sequence increase by (stop - start) / (num - 1), so that the last one is exactly stop. comparable to but slightly different from numpy.linspace tf.lin_space(10.0, 13.0, 4, name="linspace") ==> [10.0 11.0 12.0 13.0] #tf.range([start], limit=None, delta=1, dtype=None, name='range') # create a sequence of numbers that begins at start and extends by increments of delta up to but not including limit. slight different from range in Python # 'start' is 3, 'limit' is 18, 'delta' is 3 tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15] # 'start' is 3, 'limit' is 1, 'delta' is -0.5 tf.range(start, limit, delta) ==> [3, 2.5, 2, 1.5] # 'limit' is 5 tf.range(limit) ==> [0, 1, 2, 3, 4] 不像Numpy或者Python其他序列,TensorFlow序列不能迭代 for _ in np.linspace(0, 10, 4): # OK for _ in tf.linspace(0.0, 10.0, 4): # TypeError: 'Tensor' object is not iterable. for _ in range(4): # OK for _ in tf.range(4): # TypeError: 'Tensor' object is not iterable. 生成随机常量: * tf.random_normal * tf.truncated_normal * tf.random_uniform * tf.random_shuffle * tf.random_crop * tf.multinomial * tf.random_gamma * tf.set_random_seed ===变量=== * tf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None) 如果检测到命名冲突,系统会自己处理。 每次都创建新对象 * tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, custom_getter=None) 如果检测到命名冲突,系统会报错。因而,需要跨作用域共享变量的时候,应该使用tf.get_variable() * tf.global_variables_initializer 初始化全局变量 tf.assign(variableName,value) 赋值给变量 ===数学运算=== 各种除法 import tensorflow as tf a = tf.constant([2, 2], name='a') b = tf.constant([[0, 1], [2, 3]], name='b') with tf.Session() as sess: #print(sess.run(tf.div(b, a))) # ⇒ [[0 0] [1 1]] 过时了 print(sess.run(tf.divide(b, a))) # ⇒ [[0. 0.5] [1. 1.5]] print(sess.run(tf.truediv(b, a))) # ⇒ [[0. 0.5] [1. 1.5]] print(sess.run(tf.floordiv(b, a))) # ⇒ [[0 0] [1 1]] #print(sess.run(tf.realdiv(b, a))) # ⇒ # Error: only works for real values print(sess.run(tf.truncatediv(b, a))) # ⇒ [[0 0] [1 1]] print(sess.run(tf.floor_div(b, a))) # ⇒ [[0 0] [1 1]] {| class="wikitable" |- |tf.add(x, y, name=None) || 求和 |- |tf.sub(x, y, name=None) || 减法 |- |tf.mul(x, y, name=None) || 乘法 |- |tf.div(x, y, name=None) || 除法 |- |tf.mod(x, y, name=None) || 取模 |- |tf.abs(x, name=None) || 求绝对值 |- |tf.neg(x, name=None) || 取负 (y = -x). |- |tf.sign(x, name=None) || 返回符号 y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0. |- |tf.inv(x, name=None) || 取反 |- |tf.square(x, name=None) || 计算平方 (y = x * x = x^2). |- |tf.round(x, name=None) || 舍入最接近的整数 # ‘a’is [0.9, 2.5, 2.3, -4.4], tf.round(a)则[ 1.0, 3.0, 2.0, -4.0 ] |- |tf.sqrt(x, name=None) || 开根号 (y = \sqrt{x} = x^{1/2}). |- |tf.pow(x, y, name=None) || 幂次方 # tensor ‘x’ is [[2, 2], [3, 3]] # tensor ‘y’ is [[8, 16], [2, 3]] tf.pow(x, y) 则 [[256, 65536], [9, 27]] |- |tf.exp(x, name=None) || 计算e的次方 |- |tf.log(x, name=None) || 计算log,一个输入计算e的ln,两各输入以第二输入为基 |- |tf.maximum(x, y, name=None) || 返回最大值 (x > y ? x : y) |- |tf.minimum(x, y, name=None) || 返回最小值 (x < y ? x : y) |- |tf.cos(x, name=None) || 三角函数cosine |- |tf.sin(x, name=None) || 三角函数sine |- |tf.tan(x, name=None) || 三角函数tan |- |tf.atan(x, name=None) || 三角函数ctan |} 数据类型转换Casting {| class="wikitable" |- !操作!!描述 |- |tf.string_to_number(string_tensor, out_type=None, name=None)||字符串转为数字 |- |tf.to_double(x, name=’ToDouble’) ||转为64位浮点类型–float64 |- |tf.to_float(x, name=’ToFloat’) ||转为32位浮点类型–float32 |- |tf.to_int32(x, name=’ToInt32’) ||转为32位整型–int32 |- |tf.to_int64(x, name=’ToInt64’) ||转为64位整型–int64 |- |tf.cast(x, dtype, name=None) ||将x或者x.values转换为dtype # tensor a is [1.8, 2.2], tf.cast(a, tf.int32) ==> [1, 2] # dtype=tf.int32 |} 形状操作Shapes and Shaping {| class="wikitable" |- 操作 描述 |- |tf.shape(input, name=None) 返回数据的shape # ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] shape(t) ==> [2, 2, 3] |- |tf.size(input, name=None) 返回数据的元素数量 # ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]] size(t) ==> 12 |- |tf.rank(input, name=None) 返回tensor的rank 注意:此rank不同于矩阵的rank, tensor的rank表示一个tensor需要的索引数目来唯一表示任何一个元素 也就是通常所说的 “order”, “degree”或”ndims” #’t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] # shape of tensor ‘t’ is [2, 2, 3] rank(t) ==> 3 tf.reshape(tensor, shape, name=None) 改变tensor的形状 # tensor ‘t’ is [1, 2, 3, 4, 5, 6, 7, 8, 9] # tensor ‘t’ has shape [9] reshape(t, [3, 3]) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #如果shape有元素[-1],表示在该维度打平至一维 # -1 将自动推导得为 9: reshape(t, [2, -1]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3], [4, 4, 4, 5, 5, 5, 6, 6, 6]] tf.expand_dims(input, dim, name=None) 插入维度1进入一个tensor中 #该操作要求-1-input.dims() # ‘t’ is a tensor of shape [2] shape(expand_dims(t, 0)) ==> [1, 2] shape(expand_dims(t, 1)) ==> [2, 1] shape(expand_dims(t, -1)) ==> [2, 1] <= dim <= input.dims() 切片与合并(Slicing and Joining) 操作 描述 tf.slice(input_, begin, size, name=None) 对tensor进行切片操作 其中size[i] = input.dim_size(i) - begin[i] 该操作要求 0 <= begin[i] <= begin[i] + size[i] <= Di for i in [0, n] #’input’ is #[[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5], [6, 6, 6]]] tf.slice(input, [1, 0, 0], [1, 1, 3]) ==> [[[3, 3, 3]]] tf.slice(input, [1, 0, 0], [1, 2, 3]) ==> [[[3, 3, 3], [4, 4, 4]]] tf.slice(input, [1, 0, 0], [2, 1, 3]) ==> [[[3, 3, 3]], [[5, 5, 5]]] tf.split(split_dim, num_split, value, name=’split’) 沿着某一维度将tensor分离为num_split tensors # ‘value’ is a tensor with shape [5, 30] # Split ‘value’ into 3 tensors along dimension 1 split0, split1, split2 = tf.split(1, 3, value) tf.shape(split0) ==> [5, 10] tf.concat(concat_dim, values, name=’concat’) 沿着某一维度连结tensor t1 = [[1, 2, 3], [4, 5, 6]] t2 = [[7, 8, 9], [10, 11, 12]] tf.concat(0, [t1, t2]) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] tf.concat(1, [t1, t2]) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]] 如果想沿着tensor一新轴连结打包,那么可以: tf.concat(axis, [tf.expand_dims(t, axis) for t in tensors]) 等同于tf.pack(tensors, axis=axis) tf.pack(values, axis=0, name=’pack’) 将一系列rank-R的tensor打包为一个rank-(R+1)的tensor # ‘x’ is [1, 4], ‘y’ is [2, 5], ‘z’ is [3, 6] pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]] # 沿着第一维pack pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]] 等价于tf.pack([x, y, z]) = np.asarray([x, y, z]) tf.reverse(tensor, dims, name=None) 沿着某维度进行序列反转 其中dim为列表,元素为bool型,size等于rank(tensor) # tensor ‘t’ is [[[[ 0, 1, 2, 3], #[ 4, 5, 6, 7], #[ 8, 9, 10, 11]], #[[12, 13, 14, 15], #[16, 17, 18, 19], #[20, 21, 22, 23]]]] # tensor ‘t’ shape is [1, 2, 3, 4] # ‘dims’ is [False, False, False, True] reverse(t, dims) ==> [[[[ 3, 2, 1, 0], [ 7, 6, 5, 4], [ 11, 10, 9, 8]], [[15, 14, 13, 12], [19, 18, 17, 16], [23, 22, 21, 20]]]] tf.transpose(a, perm=None, name=’transpose’) 调换tensor的维度顺序 按照列表perm的维度排列调换tensor顺序, 如为定义,则perm为(n-1…0) # ‘x’ is [[1 2 3],[4 5 6]] tf.transpose(x) ==> [[1 4], [2 5],[3 6]] # Equivalently tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]] tf.gather(params, indices, validate_indices=None, name=None) 合并索引indices所指示params中的切片 tf.gather tf.one_hot (indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None) indices = [0, 2, -1, 1] depth = 3 on_value = 5.0 off_value = 0.0 axis = -1 #Then output is [4 x 3]: output = [5.0 0.0 0.0] // one_hot(0) [0.0 0.0 5.0] // one_hot(2) [0.0 0.0 0.0] // one_hot(-1) [0.0 5.0 0.0] // one_hot(1) 矩阵相关运算 操作 描述 tf.diag(diagonal, name=None) 返回一个给定对角值的对角tensor # ‘diagonal’ is [1, 2, 3, 4] tf.diag(diagonal) ==> [[1, 0, 0, 0] [0, 2, 0, 0] [0, 0, 3, 0] [0, 0, 0, 4]] tf.diag_part(input, name=None) 功能与上面相反 tf.trace(x, name=None) 求一个2维tensor足迹,即对角值diagonal之和 tf.transpose(a, perm=None, name=’transpose’) 调换tensor的维度顺序 按照列表perm的维度排列调换tensor顺序, 如为定义,则perm为(n-1…0) # ‘x’ is [[1 2 3],[4 5 6]] tf.transpose(x) ==> [[1 4], [2 5],[3 6]] # Equivalently tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]] tf.matmul(a, b, transpose_a=False, transpose_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 矩阵相乘 tf.matrix_determinant(input, name=None) 返回方阵的行列式 tf.matrix_inverse(input, adjoint=None, name=None) 求方阵的逆矩阵,adjoint为True时,计算输入共轭矩阵的逆矩阵 tf.cholesky(input, name=None) 对输入方阵cholesky分解, 即把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解A=LL^T tf.matrix_solve(matrix, rhs, adjoint=None, name=None) 求解tf.matrix_solve(matrix, rhs, adjoint=None, name=None) matrix为方阵shape为[M,M],rhs的shape为[M,K],output为[M,K] 复数操作 操作 描述 tf.complex(real, imag, name=None) 将两实数转换为复数形式 # tensor ‘real’ is [2.25, 3.25] # tensor imag is [4.75, 5.75] tf.complex(real, imag) ==> [[2.25 + 4.75j], [3.25 + 5.75j]] tf.complex_abs(x, name=None) 计算复数的绝对值,即长度。 # tensor ‘x’ is [[-2.25 + 4.75j], [-3.25 + 5.75j]] tf.complex_abs(x) ==> [5.25594902, 6.60492229] tf.conj(input, name=None) 计算共轭复数 tf.imag(input, name=None) tf.real(input, name=None) 提取复数的虚部和实部 tf.fft(input, name=None) 计算一维的离散傅里叶变换,输入数据类型为complex64 归约计算(Reduction) 操作 描述 tf.reduce_sum(input_tensor, reduction_indices=None, keep_dims=False, name=None) 计算输入tensor元素的和,或者安照reduction_indices指定的轴进行求和 # ‘x’ is [[1, 1, 1] # [1, 1, 1]] tf.reduce_sum(x) ==> 6 tf.reduce_sum(x, 0) ==> [2, 2, 2] tf.reduce_sum(x, 1) ==> [3, 3] tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] tf.reduce_sum(x, [0, 1]) ==> 6 tf.reduce_prod(input_tensor, reduction_indices=None, keep_dims=False, name=None) 计算输入tensor元素的乘积,或者安照reduction_indices指定的轴进行求乘积 tf.reduce_min(input_tensor, reduction_indices=None, keep_dims=False, name=None) 求tensor中最小值 tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None) 求tensor中最大值 tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None) 求tensor中平均值 tf.reduce_all(input_tensor, reduction_indices=None, keep_dims=False, name=None) 对tensor中各个元素求逻辑’与’ # ‘x’ is # [[True, True] # [False, False]] tf.reduce_all(x) ==> False tf.reduce_all(x, 0) ==> [False, False] tf.reduce_all(x, 1) ==> [True, False] tf.reduce_any(input_tensor, reduction_indices=None, keep_dims=False, name=None) 对tensor中各个元素求逻辑’或’ tf.accumulate_n(inputs, shape=None, tensor_dtype=None, name=None) 计算一系列tensor的和 # tensor ‘a’ is [[1, 2], [3, 4]] # tensor b is [[5, 0], [0, 6]] tf.accumulate_n([a, b, a]) ==> [[7, 4], [6, 14]] tf.cumsum(x, axis=0, exclusive=False, reverse=False, name=None) 求累积和 tf.cumsum([a, b, c]) ==> [a, a + b, a + b + c] tf.cumsum([a, b, c], exclusive=True) ==> [0, a, a + b] tf.cumsum([a, b, c], reverse=True) ==> [a + b + c, b + c, c] tf.cumsum([a, b, c], exclusive=True, reverse=True) ==> [b + c, c, 0] 分割(Segmentation) 操作 描述 tf.segment_sum(data, segment_ids, name=None) 根据segment_ids的分段计算各个片段的和 其中segment_ids为一个size与data第一维相同的tensor 其中id为int型数据,最大id不大于size c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) tf.segment_sum(c, tf.constant([0, 0, 1])) ==>[[0 0 0 0] [5 6 7 8]] 上面例子分为[0,1]两id,对相同id的data相应数据进行求和, 并放入结果的相应id中, 且segment_ids只升不降 tf.segment_prod(data, segment_ids, name=None) 根据segment_ids的分段计算各个片段的积 tf.segment_min(data, segment_ids, name=None) 根据segment_ids的分段计算各个片段的最小值 tf.segment_max(data, segment_ids, name=None) 根据segment_ids的分段计算各个片段的最大值 tf.segment_mean(data, segment_ids, name=None) 根据segment_ids的分段计算各个片段的平均值 tf.unsorted_segment_sum(data, segment_ids, num_segments, name=None) 与tf.segment_sum函数类似, 不同在于segment_ids中id顺序可以是无序的 tf.sparse_segment_sum(data, indices, segment_ids, name=None) 输入进行稀疏分割求和 c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) # Select two rows, one segment. tf.sparse_segment_sum(c, tf.constant([0, 1]), tf.constant([0, 0])) ==> [[0 0 0 0]] 对原data的indices为[0,1]位置的进行分割, 并按照segment_ids的分组进行求和 序列比较与索引提取(Sequence Comparison and Indexing) 操作 描述 tf.argmin(input, dimension, name=None) 返回input最小值的索引index tf.argmax(input, dimension, name=None) 返回input最大值的索引index tf.listdiff(x, y, name=None) 返回x,y中不同值的索引 tf.where(input, name=None) 返回bool型tensor中为True的位置 # ‘input’ tensor is #[[True, False] #[True, False]] # ‘input’ 有两个’True’,那么输出两个坐标值. # ‘input’的rank为2, 所以每个坐标为具有两个维度. where(input) ==> [[0, 0], [1, 0]] tf.unique(x, name=None) 返回一个元组tuple(y,idx),y为x的列表的唯一化数据列表, idx为x数据对应y元素的index # tensor ‘x’ is [1, 1, 2, 4, 4, 4, 7, 8, 8] y, idx = unique(x) y ==> [1, 2, 4, 7, 8] idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] tf.invert_permutation(x, name=None) 置换x数据与索引的关系 # tensor x is [3, 4, 0, 2, 1] invert_permutation(x) ==> [2, 4, 3, 0, 1] 神经网络(Neural Network) 激活函数(Activation Functions) 操作 描述 tf.nn.relu(features, name=None) 整流函数:max(features, 0) tf.nn.relu6(features, name=None) 以6为阈值的整流函数:min(max(features, 0), 6) tf.nn.elu(features, name=None) elu函数,exp(features) - 1 if < 0,否则features Exponential Linear Units (ELUs) tf.nn.softplus(features, name=None) 计算softplus:log(exp(features) + 1) tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 计算dropout,keep_prob为keep概率 noise_shape为噪声的shape tf.nn.bias_add(value, bias, data_format=None, name=None) 对value加一偏置量 此函数为tf.add的特殊情况,bias仅为一维, 函数通过广播机制进行与value求和, 数据格式可以与value不同,返回为与value相同格式 tf.sigmoid(x, name=None) y = 1 / (1 + exp(-x)) tf.tanh(x, name=None) 双曲线切线激活函数 卷积函数(Convolution) 操作 描述 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None) 在给定的4D input与 filter下计算2D卷积 输入shape为 [batch, height, width, in_channels] tf.nn.conv3d(input, filter, strides, padding, name=None) 在给定的5D input与 filter下计算3D卷积 输入shape为[batch, in_depth, in_height, in_width, in_channels] 池化函数(Pooling) 操作 描述 tf.nn.avg_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) 平均方式池化 tf.nn.max_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) 最大值方法池化 tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None) 返回一个二维元组(output,argmax),最大值pooling,返回最大值及其相应的索引 tf.nn.avg_pool3d(input, ksize, strides, padding, name=None) 3D平均值pooling tf.nn.max_pool3d(input, ksize, strides, padding, name=None) 3D最大值pooling 数据标准化(Normalization) 操作 描述 tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) 对维度dim进行L2范式标准化 output = x / sqrt(max(sum(x**2), epsilon)) tf.nn.sufficient_statistics(x, axes, shift=None, keep_dims=False, name=None) 计算与均值和方差有关的完全统计量 返回4维元组,*元素个数,*元素总和,*元素的平方和,*shift结果 参见算法介绍 tf.nn.normalize_moments(counts, mean_ss, variance_ss, shift, name=None) 基于完全统计量计算均值和方差 tf.nn.moments(x, axes, shift=None, name=None, keep_dims=False) 直接计算均值与方差 损失函数(Losses) 操作 描述 tf.nn.l2_loss(t, name=None) output = sum(t ** 2) / 2 分类函数(Classification) 操作 描述 tf.nn.sigmoid_cross_entropy_with_logits (logits, targets, name=None)* 计算输入logits, targets的交叉熵 tf.nn.softmax(logits, name=None) 计算softmax softmax[i, j] = exp(logits[i, j]) / sum_j(exp(logits[i, j])) tf.nn.log_softmax(logits, name=None) logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i]))) tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None) 计算logits和labels的softmax交叉熵 logits, labels必须为相同的shape与数据类型 tf.nn.sparse_softmax_cross_entropy_with_logits (logits, labels, name=None) 计算logits和labels的softmax交叉熵 tf.nn.weighted_cross_entropy_with_logits (logits, targets, pos_weight, name=None) 与sigmoid_cross_entropy_with_logits()相似, 但给正向样本损失加了权重pos_weight 符号嵌入(Embeddings) 操作 描述 tf.nn.embedding_lookup (params, ids, partition_strategy=’mod’, name=None, validate_indices=True) 根据索引ids查询embedding列表params中的tensor值 如果len(params) > 1,id将会安照partition_strategy策略进行分割 1、如果partition_strategy为”mod”, id所分配到的位置为p = id % len(params) 比如有13个ids,分为5个位置,那么分配方案为: [[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]] 2、如果partition_strategy为”div”,那么分配方案为: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]] tf.nn.embedding_lookup_sparse(params, sp_ids, sp_weights, partition_strategy=’mod’, name=None, combiner=’mean’) 对给定的ids和权重查询embedding 1、sp_ids为一个N x M的稀疏tensor, N为batch大小,M为任意,数据类型int64 2、sp_weights的shape与sp_ids的稀疏tensor权重, 浮点类型,若为None,则权重为全’1’ 循环神经网络(Recurrent Neural Networks) 操作 描述 tf.nn.rnn(cell, inputs, initial_state=None, dtype=None, sequence_length=None, scope=None) 基于RNNCell类的实例cell建立循环神经网络 tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None, parallel_iterations=None, swap_memory=False, time_major=False, scope=None) 基于RNNCell类的实例cell建立动态循环神经网络 与一般rnn不同的是,该函数会根据输入动态展开 返回(outputs,state) tf.nn.state_saving_rnn(cell, inputs, state_saver, state_name, sequence_length=None, scope=None) 可储存调试状态的RNN网络 tf.nn.bidirectional_rnn(cell_fw, cell_bw, inputs, initial_state_fw=None, initial_state_bw=None, dtype=None, sequence_length=None, scope=None) 双向RNN, 返回一个3元组tuple (outputs, output_state_fw, output_state_bw) — tf.nn.rnn简要介绍— cell: 一个RNNCell实例 inputs: 一个shape为[batch_size, input_size]的tensor initial_state: 为RNN的state设定初值,可选 sequence_length:制定输入的每一个序列的长度,size为[batch_size],值范围为[0, T)的int型数据 其中T为输入数据序列的长度 @ @针对输入batch中序列长度不同,所设置的动态计算机制 @对于在时间t,和batch的b行,有 (output, state)(b, t) = ? (zeros(cell.output_size), states(b, sequence_length(b) - 1)) : cell(input(b, t), state(b, t - 1)) 求值网络(Evaluation) 操作 描述 tf.nn.top_k(input, k=1, sorted=True, name=None) 返回前k大的值及其对应的索引 tf.nn.in_top_k(predictions, targets, k, name=None) 返回判断是否targets索引的predictions相应的值 是否在在predictions前k个位置中, 返回数据类型为bool类型,len与predictions同 监督候选采样网络(Candidate Sampling) 对于有巨大量的多分类与多标签模型,如果使用全连接softmax将会占用大量的时间与空间资源,所以采用候选采样方法仅使用一小部分类别与标签作为监督以加速训练。 操作 描述 Sampled Loss Functions tf.nn.nce_loss(weights, biases, inputs, labels, num_sampled, num_classes, num_true=1, sampled_values=None, remove_accidental_hits=False, partition_strategy=’mod’, name=’nce_loss’) 返回noise-contrastive的训练损失结果 tf.nn.sampled_softmax_loss(weights, biases, inputs, labels, num_sampled, num_classes, num_true=1, sampled_values=None, remove_accidental_hits=True, partition_strategy=’mod’, name=’sampled_softmax_loss’) 返回sampled softmax的训练损失 参考- Jean et al., 2014第3部分 Candidate Samplers tf.nn.uniform_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) 通过均匀分布的采样集合 返回三元tuple 1、sampled_candidates 候选集合。 2、期望的true_classes个数,为浮点值 3、期望的sampled_candidates个数,为浮点值 tf.nn.log_uniform_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) 通过log均匀分布的采样集合,返回三元tuple tf.nn.learned_unigram_candidate_sampler (true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) 根据在训练过程中学习到的分布状况进行采样 返回三元tuple tf.nn.fixed_unigram_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, vocab_file=”, distortion=1.0, num_reserved_ids=0, num_shards=1, shard=0, unigrams=(), seed=None, name=None) 基于所提供的基本分布进行采样 保存与恢复变量 操作 描述 类tf.train.Saver(Saving and Restoring Variables) tf.train.Saver.__init__(var_list=None, reshape=False, sharded=False, max_to_keep=5, keep_checkpoint_every_n_hours=10000.0, name=None, restore_sequentially=False, saver_def=None, builder=None) 创建一个存储器Saver var_list定义需要存储和恢复的变量 tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix=’meta’, write_meta_graph=True) 保存变量 tf.train.Saver.restore(sess, save_path) 恢复变量 tf.train.Saver.last_checkpoints 列出最近未删除的checkpoint 文件名 tf.train.Saver.set_last_checkpoints(last_checkpoints) 设置checkpoint文件名列表 tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time) 设置checkpoint文件名列表和时间戳 ===设备=== with tf.device("/gpu:0"): 指定一个计算设备,作用域中的代码在该设备上执行。 == 例子 == 例:Hello World。 <syntaxhighlight lang="python"> import tensorflow as tf hw = tf.constant("Hello World") with tf.Session() as sess: print(sess.run(hw)) </syntaxhighlight> 例:两个矩阵相乘。 <syntaxhighlight lang="python"> import tensorflow as tf # Build a dataflow graph. c = tf.constant([[1.0, 2.0], [3.0, 4.0]]) d = tf.constant([[1.0, 1.0], [0.0, 1.0]]) e = tf.matmul(c, d) # Construct a `Session` to execute the graph. with tf.Session() as sess: # Execute the graph and store the value that `e` represents in `result`. result = sess.run(e) print(result) </syntaxhighlight> 例:使用Feeding在执行时传入参数 <syntaxhighlight lang="python"> import tensorflow as tf # Build a dataflow graph. c = tf.constant([[1.0, 2.0], [3.0, 4.0]]) d = tf.constant([[1.0, 1.0], [0.0, 1.0]]) e = tf.matmul(c, d) # Construct a `Session` to execute the graph. sess = tf.Session() # Execute the graph and store the value that `e` represents in `result`. result = sess.run(e,feed_dict={c:[[0.0, 0.0], [3.0, 4.0]]}) print(result) sess.close() </syntaxhighlight> TensorFlow的一大特色是其图中的节点可以是带状态的。 例:使用占位符 <syntaxhighlight lang="python"> input_placeholder = tf.placeholder(tf.int32) sess = tf.Session() print (sess.run(input_placeholder, feed_dict={input_placeholder: 2})) sess.close() </syntaxhighlight> 例:使用变量、给变量赋值 使用tf.get_variable()创建变量。tf.get_variable() 的前两个参数是必需的,其余参数是可选的。tf.get_variable(name,shape)。name 是一个唯一标识这个变量对象的字符串。它必须相对于全局图是唯一的,所以要明了你使用过的所有命名,确保没有重复。shape 是与张量形状对应的整数数组,按顺序每个维度只有一个整数。一个 3x8 矩阵形状是 [3, 8]。要创建一个标量,就需要使用形状为 [] 的空列表。有两种将值放入变量的方法:初始化器和 tf.assign()。初始化器应该把声明(tf.constant_initializer)与执行初始化(tf.global_variables_initializer)两种节点配合使用。 <syntaxhighlight lang="python"> import tensorflow as tf count_variable = tf.get_variable("count", []) zero_node = tf.constant(0.) assign_node = tf.assign(count_variable, zero_node) sess = tf.Session() sess.run(assign_node) print (sess.run(count_variable)) const_init_node = tf.constant_initializer(0.) count_variable1 = tf.get_variable("count1", [], initializer=const_init_node) init = tf.global_variables_initializer() sess.run(init) print (sess.run(count_variable1)) sess.close() </syntaxhighlight> 例子:tf.Variable() 和tf.get_variable()的区别 <syntaxhighlight lang="python"> import tensorflow as tf with tf.variable_scope("scope1"): w1 = tf.get_variable("w1", shape=[]) w2 = tf.Variable(0.0, name="w2") with tf.variable_scope("scope1", reuse=True): w1_p = tf.get_variable("w1", shape=[]) w2_p = tf.Variable(1.0, name="w2") print(w1 is w1_p, w2 is w2_p) #输出 #True False </syntaxhighlight> 例:带状态的图 <syntaxhighlight lang="python"> import tensorflow as tf # Build a dataflow graph. count = tf.Variable([0],trainable=False); init_op = tf.global_variables_initializer() update_count = count.assign_add(tf.constant([2])) # Construct a `Session` to execute the graph. sess = tf.Session() sess.run(init_op) for step in range(10): result = sess.run(update_count) print("step %d: count = %g" % (step,result)) sess.close() </syntaxhighlight> 例:梯度计算 <syntaxhighlight lang="python"> import tensorflow as tf # Build a dataflow graph. filename_queue = tf.train.string_input_producer(['1.txt'],num_epochs=1) reader = tf.TextLineReader() key,value = reader.read(filename_queue) num = tf.decode_csv(value,record_defaults=[[0]]) x = tf.Variable([0]) loss = x * num grads = tf.gradients([loss],x) grad_x = grads[0] def train_fn(sess): train_fn.counter += 1 result = sess.run(grad_x) print("step %d: grad = %g" % (train_fn.counter,result)) train_fn.counter = 0 sv = tf.train.Supervisor() tf.train.basic_train_loop(sv,train_fn) </syntaxhighlight> 假设1.txt的内容为: <pre> 3 2 5 8 </pre> 那么上述程序的输出应该为: <pre> step 1: grad = 3 step 2: grad = 2 step 3: grad = 5 step 4: grad = 8 </pre> tjtzfipj8k8xti8ghfr9akidx2o1ixp FreeBASIC/Hello World 0 30616 181641 137029 2025-07-11T03:01:51Z AromaTake 63200 調整格式、排版 181641 wikitext text/x-wiki {{Novel|FreeBASIC|Hello World|开发环境|Getting Started|课}} Hello World! 是一个著名的实例。它可以用于检测开发环境是否正常。对于编程初学者而言,它是个适用于入门的实验,几乎所有的程序员都是从这个实例开始的。 该实例在 FreeBASIC 语言中的代码如下: <syntaxhighlight lang="freebasic"> Print "Hello World!" Sleep </syntaxhighlight> 以 FBIde 为例,输入此段代码,点击 F9 键即可编译并运行。 效果如下: <br/>输出: <pre> Hello World! </pre> Print 为打印指令,将所要打印内容输在引号内,则程序会将引号内的内容打印在显示屏上。 Sleep 是暂停程序指令。如果不加该语句,程序将在屏幕上一闪而过。 fklp27c0irfauo5sdkjz4xywmbae0mu FreeBASIC/Getting Started 0 30617 181640 137147 2025-07-11T03:00:17Z AromaTake 63200 調整格式、排版 181640 wikitext text/x-wiki {{Novel|FreeBASIC|Getting Started|Hello World|基础知识、概念和术语|课}} == 变量 == === 用变量存储数据 === 有时,我们需要用一个程序来存储一些信息,以备待会儿使用,这时我们就需要用到'''变量'''。FreeBASIC 中的所有变量都有特定的类型,如数字或字符串。我们可以用 Dim 语句来声明变量的名称并说明变量的类型(即我们需要存储何种类型的信息)。 下面给出一个示例: <syntaxhighlight lang="freebasic"> Dim text As String text = "Hello World!" Print text Sleep </syntaxhighlight> 效果如下: <br/>输出: <pre> Hello World! </pre> 在这个示例中,首先用 Dim 声明变量名称为 text,类型为 String(字符串)。再用等号(=)为该变量赋值为 “Hello World!”(字符串必须放在引号内)。最后用 Print 语句打印。 下面提供几个变量类型: * Single 单精度符点型 * Double 双精度符点型 * Integer 整数型 === 在表达式中使用变量 === 给一个浅显易懂的示例: <syntaxhighlight lang="freebasic"> Dim a As String, b As String, text As String a = "Hello" b = "World" text = a + " " + b + "!" Print text Sleep </syntaxhighlight> 效果如下: <br/>输出: <pre> Hello World! </pre> 你可以像做加法一样将各字符串连接起来,把它们放在引号内即可。 == 数据输入输出 == === 通过用户输入得到数据 === 经常地,我们并不知道在程序中需要使用什么数据,除非用户输入它们。所以我们并不能在源代码中为变量赋值,而要通过用户输入数据来为变量赋值。 比如这个例子: <syntaxhighlight lang="freebasic"> Dim answer As String Input "Type something and press enter: ", answer Print "You typed: '"; answer; "'" Sleep </syntaxhighlight> 效果如下(示例): <br/>输入: <pre> Wikibooks. </pre> 输出: <pre> You typed: 'Wikibooks.' </pre> 我们使用 Input 语句,让用户输入字符串,来为变量 answer 赋值。 === 做些数学题 === 先给出一个实例: <syntaxhighlight lang="freebasic"> Dim a As Integer, b As Integer, c As Integer a = 1 b = 2 c = a + b Print c Sleep </syntaxhighlight> 效果如下: <br/>输出: <pre> 3 </pre> === 用 Input 语句做些数学题 === 我们可以用 Input 语句从用户处得到数据。 比如: <syntaxhighlight lang="freebasic"> Dim a As Integer, b As Integer, c As Integer Input "a = ", a Input "b = ", b c = a + b Print "c = a + b ="; c Sleep </syntaxhighlight> 效果如下(示例): <br/>输入: <pre> 1 2 </pre> 输出: <pre> c = a + b = 3 </pre> === 用 Input 语句做更多的数学题 === Input 语句也可以用于解决实际问题,如单位换算。 下面给出一个实例: <syntaxhighlight lang="freebasic"> Dim As Single lb, kg Input "Enter a weight in pounds:", lb kg = lb * 0.454 Print lb; " lb. is equal to "; kg; " kg" </syntaxhighlight> 效果如下(示例): <br/>输入: <pre> 2 </pre> 输出: <pre> 2 lb. is equal to 0.908 kg </pre> == 选择结构 == == 循环结构 == == 选择结构与循环结构的综合 == == 课后习题 == mzo36gfc8ny19txo3sn6fcms59297fy GhosTCP/扫描IP 0 32698 181642 172131 2025-07-11T03:07:16Z AromaTake 63200 調整格式、排版。指定syntaxhighlight語言 181642 wikitext text/x-wiki 防火长城除了使用[[:w:zh:深度包检测|深度包检测]]和[[:w:zh:TCP重置攻击|TCP重置攻击]]干扰连接外,还会使用封锁IP的方法阻止网站访问。著名的示例有谷歌、推特和脸书:DNS解析出来的IP几乎全部被封锁了。此时我们需要手动从这些网站的IP段中扫描出可用IP用于连接。 ==获取IP段== 不同的网站IP段获取方式各不相同。下面仅给出一些方法示例。 ===搜索=== 直接在搜索引擎里输入“Twitter IP range”得到第一个结果 https://ipinfo.io/AS13414 即包括Twitter所在自治系统的IP段。 ===查询WHOIS=== 比如我们查询<code><nowiki>www.google.com</nowiki></code>。 <code>dig @208.67.220.220 -p 5353 www.google.com</code>得到的IP地址为<code>142.251.214.132</code>。 然后我们再查询该IP的WHOIS记录。 <code>whois 142.251.214.132</code> 得到的一长串WHOIS信息中有如下一段: <syntaxhighlight lang=console> # whois.arin.net NetRange: 142.250.0.0 - 142.251.255.255 CIDR: 142.250.0.0/15 NetName: GOOGLE NetHandle: NET-142-250-0-0-1 Parent: NET142 (NET-142-0-0-0-0) NetType: Direct Allocation OriginAS: AS15169 Organization: Google LLC (GOGL) RegDate: 2012-05-24 Updated: 2012-05-24 Ref: https://rdap.arin.net/registry/ip/142.250.0.0 </syntaxhighlight> 我们就得到其IP段为<code>142.250.0.0/15</code> ==扫描可用IP== 扫描IP的命令是<code>.\ghostcp.exe -scanurl {URL} -scanip {IP RANGE}</code> 例如,如果您要扫描<code>www.google.com.hk</code>的IP,假设IP段为<code>172.217.0.0/16</code>,可以使用如下命令: <code>.\ghostcp.exe -scanurl <nowiki>https://www.google.com.hk</nowiki> -scanip 172.217.0.0/16</code> GhosTCP会使用IP段中的每个地址尝试访问<code><nowiki>https://www.google.com.hk</nowiki></code>这个URL,并将配置文件中指定的method应用于每个扫描时发出的连接,返回的[[:w:zh:HTTP状态码|HTTP状态码]]为200时,计入可用IP。 如果您没有在配置文件中写明对该被封锁域名的method,GhosTCP就不会修改TCP连接,此时应该是扫描不到任何IP的,因为发出的未修改的请求会被防火长城重置干扰。 g78xipbm8ac79zxvc8k7u6c5u8skbjj 營養成分 0 33651 181644 181637 2025-07-11T03:32:07Z P1ayer 1197 181644 wikitext text/x-wiki {| class="wikitable" |- ! style="width:20%"|營養種類 ! style="width:40%"|缺少時 ! style="width:40%"|過多時 |- |- |水 | ; 泌尿與腎臟系統 *腎結石:尿液濃縮,鈣離子與尿酸沉澱形成結石。 *泌尿道感染:尿量少導致細菌無法排出,易感染。 *痛風:尿酸無法有效代謝,累積引發關節炎症。 *腎功能衰退:腎臟排毒負擔加重,可能導致慢性腎病。 ;代謝與慢性疾病 *糖尿病風險上升:缺水使血糖濃度升高,長期可能誘發糖尿病。 *肥胖與代謝障礙:水分不足影響維生素代謝與脂肪分解。 ;循環與體溫調節 *{{w|脫水}}症狀:口渴、頭暈、心跳加快,嚴重可能昏迷。 - 高血壓或心臟負擔:血液濃稠,心臟需更大力泵血。 - 熱中暑:體溫調節失衡,易中暑或熱衰竭。 ;神經與情緒 *疲倦、注意力不集中:腦部缺水影響認知與情緒。 *焦慮、憂鬱傾向:研究顯示脫水可能影響情緒穩定。 ; 免疫與消化系統 *免疫力下降:水分不足影響淋巴液生成,易感染。 *便秘與消化不良:腸道蠕動減弱,排便困難。 ;外觀與感官 *皮膚乾燥、鬆弛:水分不足影響膠原蛋白與彈性。 *嘴唇乾裂、眼睛乾澀:唾液與淚液分泌減少。 *口臭與口苦:唾液減少導致細菌滋生。 | *{{w|水腫}} *{{w|水中毒}} |- |{{w|醣類}}(糖、澱粉) | *{{w|低血糖}} | *高血糖 *{{w|糖尿病}} |- |{{w|蛋白質}}(胺基酸) | ;神經與情緒相關 *情緒低落、憂鬱、失眠:蛋白質是神經傳導物質(如血清素、多巴胺)的原料,缺乏時容易影響情緒與睡眠品質。 *反應遲鈍、注意力不集中:腦部功能受影響,可能出現思考遲緩或判斷力下降。 ;肌肉與骨骼系統 *肌少症、肌肉萎縮:身體會分解肌肉以補充蛋白質,導致肌肉量下降、無力。 *骨骼脆弱、易骨折:蛋白質參與骨骼新陳代謝,缺乏時骨質密度下降。 ;血液與循環系統 *貧血:蛋白質不足會影響紅血球生成,導致貧血與頭暈。 *低血壓、心跳過慢:血液中蛋白質濃度下降,可能引起循環功能異常。 ;免疫系統 *免疫力下降、易感染:抗體與免疫細胞由蛋白質構成,缺乏時抵抗力減弱。 *傷口癒合變慢:蛋白質是修復組織的關鍵原料。 ;水分與代謝調節 *水腫:血液中白蛋白不足,導致組織液滲透壓失衡,引發水腫。 *肝功能異常、腹水:肝臟合成蛋白質的能力受限,可能導致脂肪肝或腹水。 ;外觀變化 *頭髮乾枯、脫落:角蛋白不足使髮質變差。 *皮膚粗糙、指甲脆弱:膠原蛋白與彈性蛋白減少,影響皮膚與指甲健康。 | ;腎臟與肝臟負擔加重 *腎功能惡化:蛋白質代謝會產生含氮廢物(如尿素氮),過量攝取會加重腎臟排毒負擔,特別是對腎功能不佳者。 *肝臟代謝壓力:蛋白質代謝過程中會產生氨,需由肝臟轉化為尿素,過量可能導致肝功能下降。 ;脫水與電解質失衡 *脫水症狀:排除蛋白質代謝廢物需大量水分,可能導致身體脫水與電解質流失。 *頭暈、乏力:水分與電解質不足會影響血壓與神經傳導。 ;腦部與情緒影響 *腦部功能下降:氨累積可能影響腦部,導致注意力不集中、疲倦或情緒低落。 *憂鬱與焦慮:高蛋白低碳水飲食可能抑制血清素生成,影響情緒穩定。 ;骨骼與代謝問題 *骨質疏鬆風險增加:高蛋白飲食可能導致尿鈣排出增加,影響骨骼健康。 *脂肪堆積:過剩蛋白質會透過糖質新生轉化為葡萄糖,進而儲存為脂肪。 ;發炎與加速老化 *慢性發炎:蛋白質過量會增加自由基與氧化壓力,可能抑制細胞修復系統,加速老化。 *基因穩定性下降:細胞資源傾向用於生長而非維護,可能導致基因轉錄錯誤。 ;其他症狀 *便秘與腸道不適:高蛋白飲食常伴隨纖維攝取不足,影響腸道蠕動。 *口氣異常(生酮呼吸):蛋白質代謝產物可能導致口氣變差。 |- |{{w|脂質}}(脂肪酸、食用油、脂肪) | | *{{w|肥胖症}} *心血管疾病 |- |{{w|維生素A}}(視黃醇、視黃醛、類胡蘿蔔素、β-胡蘿蔔素) | *夜盲症 *乾眼症 *保護身體上皮黏膜 *視神經萎縮和角膜軟化症 | *維生素A過多症 |- |{{w|維生素B1}}(硫胺素) | *腳氣病 *神經炎 *魏尼凱氏失語症 | |- |{{w|維生素B2}}(核黃素) | *口腔潰瘍 *皮炎 *口角炎 *角膜炎 *舌炎、脂溢性皮炎、口腔炎等 | |- |{{w|維生素B3}}(菸鹼酸、菸鹼醯胺) | *糙皮病 *失眠 *口腔潰瘍 *癩皮病等 | |- |{{w|維生素B5}}(泛酸) | *感覺異常 *肌肉痙攣 *過敏性濕疹 | |- |{{w|維生素B6}}(吡哆醇、吡哆醛、吡哆胺) | *貧血 | *肌肉運動知覺損傷、神經系統受損 |- |{{w|維生素B7}}(生物素) | *皮膚炎、腸炎 | |- |{{w|維生素B9}}(葉酸) | *巨母紅血球性貧血(症狀包括疲勞、心悸、呼吸困難、舌頭上的瘡,以及皮膚或髮色的變化) | |- |{{w|維生素B12}}(鈷胺素、羥基鈷胺、甲基鈷胺) | *巨幼細胞性貧血 *惡性貧血 |- |{{w|維生素C}}(抗壞血酸) | *壞血病 | |- |{{w|維生素D}}(膽利鈣素) | *佝僂病和骨質軟化病(佝僂病) | *維生素D過多症 |- |{{w|維生素E}}(生育酚、三雙鍵生育酚) | *維生素E缺乏非常少見;然而,新生嬰兒缺乏此維生素會罹患溶血性貧血;不育症, 習慣性流產 | |- |維生素K(維生素K1-葉綠醌,維生素K2-甲萘醌) | *出血傾向、凝血酶缺乏,不易止血 | |- |鈉 | *{{w|低血鈉症}} | *{{w|高鈉血症}} |- |鈣|| *{{w|低鈣血症}} | *{{w|高血鈣}} |- |鉀|| *{{w|低鉀血症}} | *{{w|高鉀血症}} |- |磷 | | |- |鎂 | *{{w|低血鎂症}} | |- |} ==相關== *{{w|營養}} *{{w|維生素}} *{{w|礦物質}} ==外部連結== *[https://consumer.fda.gov.tw/Food/TFND.aspx?nodeID=178 台灣地區食品營養成分資料庫 - 食品營養成分資料庫 - 食品 - 業務專區 - 衛生福利部食品藥物管理署] *[https://www.cfs.gov.hk/tc_chi/nutrient/searchmenu.php 營養資料查詢 - 香港食物安全中心] [[Category:饮食]] l2ctdt6nqi1drmymce7vkcavodt8ag1 181649 181644 2025-07-11T10:01:59Z P1ayer 1197 181649 wikitext text/x-wiki {| class="wikitable" |- ! style="width:20%"|營養種類 ! style="width:40%"|缺少時 ! style="width:40%"|過多時 |- |- |水 | ; 泌尿與腎臟系統 *腎結石:尿液濃縮,鈣離子與尿酸沉澱形成結石。 *泌尿道感染:尿量少導致細菌無法排出,易感染。 *痛風:尿酸無法有效代謝,累積引發關節炎症。 *腎功能衰退:腎臟排毒負擔加重,可能導致慢性腎病。 ;代謝與慢性疾病 *糖尿病風險上升:缺水使血糖濃度升高,長期可能誘發糖尿病。 *肥胖與代謝障礙:水分不足影響維生素代謝與脂肪分解。 ;循環與體溫調節 *{{w|脫水}}症狀:口渴、頭暈、心跳加快,嚴重可能昏迷。 - 高血壓或心臟負擔:血液濃稠,心臟需更大力泵血。 - 熱中暑:體溫調節失衡,易中暑或熱衰竭。 ;神經與情緒 *疲倦、注意力不集中:腦部缺水影響認知與情緒。 *焦慮、憂鬱傾向:研究顯示脫水可能影響情緒穩定。 ; 免疫與消化系統 *免疫力下降:水分不足影響淋巴液生成,易感染。 *便秘與消化不良:腸道蠕動減弱,排便困難。 ;外觀與感官 *皮膚乾燥、鬆弛:水分不足影響膠原蛋白與彈性。 *嘴唇乾裂、眼睛乾澀:唾液與淚液分泌減少。 *口臭與口苦:唾液減少導致細菌滋生。 | *{{w|水腫}} ;{{w|水中毒}}(低鈉血症) *定義:血液中的鈉濃度過低,導致水分滲入細胞,使細胞腫脹。 *症狀:頭痛、噁心、嘔吐、精神混亂、癲癇、昏迷,嚴重時可能致命。 *高風險族群:劇烈運動後大量補水者、腎功能不佳者、嬰幼兒、服用利尿劑或抗精神病藥物者。 ;腦部壓力與神經系統損傷 *腦水腫:細胞腫脹導致腦部壓迫,可能引發癲癇或中樞神經損害。 *意識不清:嚴重低鈉可能導致昏迷或死亡。 ;電解質失衡 *肌肉痙攣或抽筋:鈉、鉀等電解質被稀釋,影響神經與肌肉功能。 *疲倦與虛弱:腎臟代謝負擔加重,身體能量消耗增加。 ;排尿與生活品質影響 *頻尿與夜間頻尿:水分過多導致排尿次數增加,干擾睡眠與日常生活。 *腎臟過勞:長期高水量攝取可能導致腎絲球過濾壓力上升,增加腎臟硬化風險。 ;特殊族群風險 *嬰幼兒水中毒:腎功能尚未成熟,過量水分可能導致嚴重低鈉症。 *精神疾病患者:可能因病症或藥物影響而無節制飲水。 |- |{{w|醣類}}(糖、澱粉) | *{{w|低血糖}} | *高血糖 *{{w|糖尿病}} |- |{{w|蛋白質}}(胺基酸) | ;神經與情緒相關 *情緒低落、憂鬱、失眠:蛋白質是神經傳導物質(如血清素、多巴胺)的原料,缺乏時容易影響情緒與睡眠品質。 *反應遲鈍、注意力不集中:腦部功能受影響,可能出現思考遲緩或判斷力下降。 ;肌肉與骨骼系統 *肌少症、肌肉萎縮:身體會分解肌肉以補充蛋白質,導致肌肉量下降、無力。 *骨骼脆弱、易骨折:蛋白質參與骨骼新陳代謝,缺乏時骨質密度下降。 ;血液與循環系統 *貧血:蛋白質不足會影響紅血球生成,導致貧血與頭暈。 *低血壓、心跳過慢:血液中蛋白質濃度下降,可能引起循環功能異常。 ;免疫系統 *免疫力下降、易感染:抗體與免疫細胞由蛋白質構成,缺乏時抵抗力減弱。 *傷口癒合變慢:蛋白質是修復組織的關鍵原料。 ;水分與代謝調節 *水腫:血液中白蛋白不足,導致組織液滲透壓失衡,引發水腫。 *肝功能異常、腹水:肝臟合成蛋白質的能力受限,可能導致脂肪肝或腹水。 ;外觀變化 *頭髮乾枯、脫落:角蛋白不足使髮質變差。 *皮膚粗糙、指甲脆弱:膠原蛋白與彈性蛋白減少,影響皮膚與指甲健康。 | ;腎臟與肝臟負擔加重 *腎功能惡化:蛋白質代謝會產生含氮廢物(如尿素氮),過量攝取會加重腎臟排毒負擔,特別是對腎功能不佳者。 *肝臟代謝壓力:蛋白質代謝過程中會產生氨,需由肝臟轉化為尿素,過量可能導致肝功能下降。 ;脫水與電解質失衡 *脫水症狀:排除蛋白質代謝廢物需大量水分,可能導致身體脫水與電解質流失。 *頭暈、乏力:水分與電解質不足會影響血壓與神經傳導。 ;腦部與情緒影響 *腦部功能下降:氨累積可能影響腦部,導致注意力不集中、疲倦或情緒低落。 *憂鬱與焦慮:高蛋白低碳水飲食可能抑制血清素生成,影響情緒穩定。 ;骨骼與代謝問題 *骨質疏鬆風險增加:高蛋白飲食可能導致尿鈣排出增加,影響骨骼健康。 *脂肪堆積:過剩蛋白質會透過糖質新生轉化為葡萄糖,進而儲存為脂肪。 ;發炎與加速老化 *慢性發炎:蛋白質過量會增加自由基與氧化壓力,可能抑制細胞修復系統,加速老化。 *基因穩定性下降:細胞資源傾向用於生長而非維護,可能導致基因轉錄錯誤。 ;其他症狀 *便秘與腸道不適:高蛋白飲食常伴隨纖維攝取不足,影響腸道蠕動。 *口氣異常(生酮呼吸):蛋白質代謝產物可能導致口氣變差。 |- |{{w|脂質}}(脂肪酸、食用油、脂肪) | | *{{w|肥胖症}} *心血管疾病 |- |{{w|維生素A}}(視黃醇、視黃醛、類胡蘿蔔素、β-胡蘿蔔素) | *夜盲症 *乾眼症 *保護身體上皮黏膜 *視神經萎縮和角膜軟化症 | *維生素A過多症 |- |{{w|維生素B1}}(硫胺素) | *腳氣病 *神經炎 *魏尼凱氏失語症 | |- |{{w|維生素B2}}(核黃素) | *口腔潰瘍 *皮炎 *口角炎 *角膜炎 *舌炎、脂溢性皮炎、口腔炎等 | |- |{{w|維生素B3}}(菸鹼酸、菸鹼醯胺) | *糙皮病 *失眠 *口腔潰瘍 *癩皮病等 | |- |{{w|維生素B5}}(泛酸) | *感覺異常 *肌肉痙攣 *過敏性濕疹 | |- |{{w|維生素B6}}(吡哆醇、吡哆醛、吡哆胺) | *貧血 | *肌肉運動知覺損傷、神經系統受損 |- |{{w|維生素B7}}(生物素) | *皮膚炎、腸炎 | |- |{{w|維生素B9}}(葉酸) | *巨母紅血球性貧血(症狀包括疲勞、心悸、呼吸困難、舌頭上的瘡,以及皮膚或髮色的變化) | |- |{{w|維生素B12}}(鈷胺素、羥基鈷胺、甲基鈷胺) | *巨幼細胞性貧血 *惡性貧血 |- |{{w|維生素C}}(抗壞血酸) | *壞血病 | |- |{{w|維生素D}}(膽利鈣素) | *佝僂病和骨質軟化病(佝僂病) | *維生素D過多症 |- |{{w|維生素E}}(生育酚、三雙鍵生育酚) | *維生素E缺乏非常少見;然而,新生嬰兒缺乏此維生素會罹患溶血性貧血;不育症, 習慣性流產 | |- |維生素K(維生素K1-葉綠醌,維生素K2-甲萘醌) | *出血傾向、凝血酶缺乏,不易止血 | |- |鈉 | *{{w|低血鈉症}} | *{{w|高鈉血症}} |- |鈣|| *{{w|低鈣血症}} | *{{w|高血鈣}} |- |鉀|| *{{w|低鉀血症}} | *{{w|高鉀血症}} |- |磷 | | |- |鎂 | *{{w|低血鎂症}} | |- |} ==相關== *{{w|營養}} *{{w|維生素}} *{{w|礦物質}} ==外部連結== *[https://consumer.fda.gov.tw/Food/TFND.aspx?nodeID=178 台灣地區食品營養成分資料庫 - 食品營養成分資料庫 - 食品 - 業務專區 - 衛生福利部食品藥物管理署] *[https://www.cfs.gov.hk/tc_chi/nutrient/searchmenu.php 營養資料查詢 - 香港食物安全中心] [[Category:饮食]] 6f9o9rqjrz06rsoegviib3tjp9a0kl2