用Python實現神經網絡(五)

這一節告訴你如何用TensorFlow實現全連接網絡。

安裝 DeepChem

這一節,你將使用DeepChem 機器學習工具鏈進行實驗在網上可以找到 DeepChem詳細安裝指導。

Tox21 Dataset

作為我們的建模案例研究,我們使用化學數據庫。毒理學家很感興趣于用機器學習來預測化學物是有毒。這個任務很復雜,因為令天的科學對代謝過程了解得很少。但是,生物學家和化學家用有限的實驗來提示毒性。如果一個化學物命中這個實驗之一,它很可能對人類有毒。但是這些實驗成本很高。所以數據學家構建機器學習模型來預測新化合物的結果。

一個重要的毒理學數據集是Tox21。我們分析 Tox21里的其中一個數據集。這個數據集有 10,000個化學物與雄激素受體的相互作有用。數據科學家需要預測新化合物是否與雄激素受體有相互作用。處理數據集很有技巧,所有要用DeepChem里的MoleculeNet 數據集。 Each molecule in Tox21里的分子被DeepChem處理為長度為1024的位-向量。簡單的調用DeepChem來加載數據集 (Example 4-1).

Example 4-1. Load the Tox21 dataset

import deepchem as dc

_, (train, valid, test), _ = dc.molnet.load_tox21()

train_X, train_y, train_w = train.X, train.y, train.w

valid_X, valid_y, valid_w = valid.X, valid.y, valid.w

test_X, test_y, test_w = test.X, test.y, test.w

這里 X是處理過的特征向量, y 是標簽,? w 是權重。標簽是 1/0 表示是否與雄激素交互。 Tox21 存貯不平衡數據集,正樣本數少于負樣本數。所有的變量為NumPy 數組。Tox21有很多數據集我們不需要在這里分析,所以我們要去除這相關的數據集的標簽。 (Example 4-2).

Example 4-2. Remove extra datasets from Tox21

# Remove extra tasks

train_y = train_y[:, 0]

valid_y = valid_y[:, 0]

test_y = test_y[:, 0]

train_w = train_w[:, 0]

valid_w = valid_w[:, 0]

test_w = test_w[:, 0]

接收Minibatches為Placeholders

(Example 4-3).

Example 4-3. Defining placeholders that accept minibatches of different sizes

d = 1024

with tf.name_scope("placeholders"):

x = tf.placeholder(tf.float32, (None, d))

y = tf.placeholder(tf.float32, (None,))

Note d is 1024, the dimensionality of our feature vectors.

實現隱藏層

?Example 4-4.

Example 4-4. Defining a hidden layer

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

我們使用 tf.nn.relu激活函數。其它代碼與邏輯回歸的代碼相似。

?Example 4-5.

Example 4-5. Defining the fully connected architecture

with tf.name_scope("placeholders"):

x = tf.placeholder(tf.float32, (None, d))

y = tf.placeholder(tf.float32, (None,))

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

with tf.name_scope("output"):

W = tf.Variable(tf.random_normal((n_hidden, 1)))

b = tf.Variable(tf.random_normal((1,)))

y_logit = tf.matmul(x_hidden, W) + b

# the sigmoid gives the class probability of 1

y_one_prob = tf.sigmoid(y_logit)

# Rounding P(y=1) will give the correct prediction.

y_pred = tf.round(y_one_prob)

with tf.name_scope("loss"):

# Compute the cross-entropy term for each datapoint

y_expand = tf.expand_dims(y, 1)

entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=y_logit, labels=y_expand)

# Sum all contributions

l = tf.reduce_sum(entropy)

with tf.name_scope("optim"):

train_op = tf.train.AdamOptimizer(learning_rate).minimize(l)

with tf.name_scope("summaries"):

tf.summary.scalar("loss", l)

merged = tf.summary.merge_all()

添加Dropout到隱藏層

TensorFlow 使用tf.nn.dropout(x, keep_prob)為我們實現dropout,其中 keep_prob 是節點保留的概率。記住在訓練時打開dropout,預測時關閉dropout Example 4-6.

Example 4-6. Add a placeholder for dropout probability

keep_prob = tf.placeholder(tf.float32)

在訓練時我們傳遞希望的值,通常 0.5,測試時我們設置keep_prob 1.0 因為我們要用學習過的節點進行預測。添加dropout到全連接網絡只需要額外的一行代碼。(Example 4-7).

Example 4-7. Defining a hidden layer with dropout

with tf.name_scope("hidden-layer"):

W = tf.Variable(tf.random_normal((d, n_hidden)))

b = tf.Variable(tf.random_normal((n_hidden,)))

x_hidden = tf.nn.relu(tf.matmul(x, W) + b)

# Apply dropout

x_hidden = tf.nn.dropout(x_hidden, keep_prob)

實施Minibatching

我們用NumPy數組切片實現 (Example 4-8).

Example 4-8. Training on minibatches

step = 0

for epoch in range(n_epochs):

pos = 0

while pos < N:

batch_X = train_X[pos:pos+batch_size]

batch_y = train_y[pos:pos+batch_size]

feed_dict = {x: batch_X, y: batch_y, keep_prob: dropout_prob}

_, summary, loss = sess.run([train_op, merged, l], feed_dict=feed_dict)

print("epoch %d, step %d, loss: %f" % (epoch, step, loss))

train_writer.add_summary(summary, step)

step += 1

pos += batch_size

評估模型的準確性Evaluating Model Accuracy

我們要用驗證集來測量準確性。但是不平衡數據需要點技巧。我們的數據集里有 95% 有數據標簽為0 只有 5% 的標簽為1。結果所有的0 模型將有95%準確率!這不是我們想要的。更好的選擇是增加正樣本的權重。計算加權的準確性,我們使用 accuracy_score(true,

pred, sample_weight=given_sample_weight) 來自sklearn.metrics。這個函數的關鍵參數是sample_weight,讓我們指明希望的權重(Example 4-9).

Example 4-9. Computing a weighted accuracy

train_weighted_score = accuracy_score(train_y, train_y_pred, sample_weight=train_w)

print("Train Weighted Classification Accuracy: %f" % train_weighted_score)

valid_weighted_score = accuracy_score(valid_y, valid_y_pred, sample_weight=valid_w)

print("Valid Weighted Classification Accuracy: %f" % valid_weighted_score)

現在我們訓練模型 (黙認 10)并測量準確性:

Train Weighted Classification Accuracy: 0.742045

Valid Weighted Classification Accuracy: 0.648828

使用TensorBoard跟蹤模型的收斂

我們用TensorBoard來觀察模型。首先檢圖結構 (Figure 4-35).

然后擴展隱藏層(Figure 4-36).

圖 4-35. 可視化全連接網絡的計算圖.

圖 4-36. 可視化全連接網絡的擴展計算圖.

你可以看到可訓練參數和dropout操作在這里是如何呈現的。下面是損失曲線 (Figure 4-37).

圖4-37. 可視化全連接網絡的損失曲線.

我們放大看仔細點 (Figure 4-38).

圖 4-38. 局部放大損失曲線

看起來并不平! 這就是使用 minibatch訓練的代價。我們不再有漂亮平滑的損失曲線。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90106.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ReasonFlux:基于思維模板與分層強化學習的高效推理新范式

“以結構化知識壓縮搜索空間&#xff0c;讓輕量模型實現超越尺度的推理性能” ReasonFlux 是由普林斯頓大學與北京大學聯合研發的創新框架&#xff08;2025年2月發布&#xff09;&#xff0c;通過 結構化思維模板 與 分層強化學習&#xff0c;顯著提升大語言模型在復雜推理任務…

PHP與Web頁面交互:從基礎表單到AJAX實戰

文章目錄 PHP與Web頁面交互:從基礎到高級實踐 1. 引言 2. 基礎表單處理 2.1 HTML表單與PHP交互基礎 2.2 GET與POST方法比較 3. 高級交互技術 3.1 AJAX與PHP交互 3.2 使用Fetch API進行現代AJAX交互 4. 文件上傳處理 5. 安全性考量 5.1 常見安全威脅與防護 5.2 數據驗證與過濾 …

OpenCV基本的圖像處理

參考資料&#xff1a; 參考視頻 視頻參考資料:鏈接: https://pan.baidu.com/s/1_DJTOerxpu5_dSfd4ZNlAA 提取碼: 8v2n 相關代碼 概述&#xff1a; 因為本人是用于機器視覺的圖像處理&#xff0c;所以只記錄了OpenCV的形態學操作和圖像平滑處理兩部分 形態學操作&#xff1a;…

Git 與 GitHub 學習筆記

本文是一份全面的 Git 入門指南,涵蓋了從環境配置、創建倉庫到日常分支管理和與 GitHub 同步的全部核心操作。 Part 1: 初始配置 (一次性搞定) 在開始使用 Git 之前,需要先配置好你的電腦環境。(由于網絡的原因,直接使用https的方式拉取倉庫大概率是失敗的,故使用ssh的方…

文件系統-文件存儲空間管理

文件存儲空間管理的核心是空閑塊的組織、分配與回收&#xff0c;確保高效利用磁盤空間并快速響應文件操作&#xff08;創建、刪除、擴展&#xff09;。以下是三種主流方法&#xff1a;1. 空閑表法&#xff08;連續分配&#xff09;原理&#xff1a;類似內存動態分區&#xff0c…

python爬蟲實戰-小案例:爬取蘇寧易購的好評

一、項目背景與價值1 為什么爬取商品好評&#xff1f; 消費者洞察&#xff1a;分析用戶真實反饋&#xff0c;了解產品優缺點 市場研究&#xff1a;監測競品評價趨勢&#xff0c;優化產品策略二.實現代碼from selenium import webdriver from selenium.webdriver.edge.options i…

Spring Boot環境搭建與核心原理深度解析

一、開發環境準備 1.1 工具鏈選擇 JDK版本&#xff1a;推薦使用JDK 17&#xff08;LTS版本&#xff09;&#xff0c;與Spring Boot 3.2.5完全兼容&#xff0c;支持虛擬線程等JDK 21特性可通過配置啟用構建工具&#xff1a;Maven 3.8.6&#xff08;配置阿里云鏡像加速依賴下載…

Java自動拆箱機制

在黑馬點評項目中&#xff0c;提到了一個細節&#xff0c;就是Java的自動拆箱機制&#xff0c;本文來簡單了解一下。Java 的??自動拆箱機制&#xff08;Unboxing&#xff09;??是一種編譯器層面的語法糖&#xff0c;用于簡化??包裝類對象??&#xff08;如 Integer、Boo…

哈希算法(Hash Algorithm)

哈希算法&#xff08;Hash Algorithm&#xff09;是一種將任意長度的數據映射為固定長度的哈希值&#xff08;Hash Value&#xff09;的算法&#xff0c;廣泛應用于密碼學、數據完整性驗證、數據結構&#xff08;如哈希表&#xff09;和數字簽名等領域。&#x1f9e0; 一、哈希…

黑馬點評使用Apifox進行接口測試(以導入更新店鋪為例、詳細圖解)

目錄 一、前言 二、手動完成接口測試所需配置 三、進行接口測試 一、前言 在學習黑馬點評P39實現商鋪緩存與數據庫的雙寫一致課程中&#xff0c;老師使用postman進行了更新店鋪的接口測試。由于課程是22年的&#xff0c;按照我從24年JavaWebAI課程所學習使用的Apifox內部其實…

Ubuntu 虛擬機配置 與Windows互傳文件

在VMware中為Ubuntu虛擬機設置共享文件夾 設置共享文件夾可以傳遞大量文件 在VMware的設置中打開共享文件夾功能&#xff0c;并設置共享文件夾的目錄。 點擊添加后&#xff0c;選擇一個電腦上的文件夾&#xff0c;這個文件夾最好是新建的空的。 完成后在“文件夾”列表中就…

機器學習對詞法分析、句法分析、淺層語義分析的積極影響

機器學習在自然語言處理的詞法、句法及淺層語義分析中產生了革命性影響&#xff0c;顯著提升了各任務的精度和效率。以下是具體影響及實例說明&#xff1a;??一、詞法分析??1. ??中文分詞????提升歧義消解能力??&#xff1a;傳統方法依賴規則或統計&#xff0c;但深…

初學者STM32—USART

一、簡介USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff0c;通用同步/異步收發器&#xff09;是一種常見的串行通信協議&#xff0c;廣泛應用于微控制器、傳感器、模塊和其他電子設備之間的數據傳輸。本節課主要學習USART的基本結構以及其…

A316-V71-Game-V1:虛擬7.1游戲聲卡評估板技術解析

引言 隨著游戲產業的蓬勃發展&#xff0c;沉浸式音頻體驗成為提升游戲體驗的關鍵因素。本文將介紹一款專為游戲音頻設計的評估板——A316-V71-Game-V1&#xff0c;這是一款基于XMOS XU316技術的虛擬7.1游戲聲卡評估平臺。產品概述 A316-V71-Game-V1是一款專為虛擬7.1游戲聲卡設…

小白成長之路-部署Zabbix7

文章目錄一、概述二、案例三、第二臺虛擬機監控總結一、概述 二、案例 實驗開始前&#xff1a; systemctl disable --now firewalld setenforce 0 Rocky9.4部署Zabbix7 一、配置安裝源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el…

飛書非正常顯示與權限問題解決方案

可能是本地緩存導致的&#xff0c;讓員工參考以下方法操作下&#xff1a;看不懂下面的建議刪除飛書再重新安裝&#xff1b;博主就遇到過版本低的原因&#xff0c;試過下面方面都不行。結果就是刪除重新安裝&#xff0c;博主是mac電腦。Windows 系統關閉飛書。如果不能關閉&…

第十八節:第八部分:java高級:動態代理設計模式介紹、準備工作、代碼實現

程序為什么需要代理以及代理長什么樣如何為java對象創建一個代理對象代碼&#xff1a; BigStar類 package com.itheima.day11_Proxy;public class BigStar implements Star {private String name;public BigStar(String name) {this.name name;}public String sing(String nam…

Grok網站的后端語言是php和Python2.7

老馬的Grok模型 https://grok.com/#subscribephp語法這里還出現了兩個bug后端語言能看到是php和python2.7要說卷還是得看中國的程序員啊&#xff0c;天天就是新技術&#xff0c;趕不上別人就35歲畢業退休

開發者的AI認知指南:用大模型重新理解人工智能(下)

第三篇 深度學習探索&#xff1a;神經網絡的奧秘解析 從手工特征工程到自動特征學習&#xff0c;深度學習為什么能讓AI"看懂"圖片、"聽懂"語音&#xff1f;讓我們用開發者的視角揭開神經網絡的神秘面紗。 深度學習的"代碼革命" 還記得我們在第二…

基于單片機智能消毒柜設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的高效智能消毒柜系統&#xff0c;集精準滅菌、安全防護與能耗管理于…