主頁 >  其他 > 《深度學習實戰》第3章 前饋神經網路

《深度學習實戰》第3章 前饋神經網路

2021-11-02 09:11:52 其他

實作深層神經網路

本章我們將編碼完成全連接神經網路,并使用CIFAR-10資料集進行測驗,在本章練習中我們將完成:

  • 1.仿射層傳播
  • 2.ReLU層傳播
  • 3.組合單層神經元
  • 4.實作淺層全連接神經網路
  • 5.實作深層全連接神經網路
# -*- coding: utf-8 -*-
import time
import numpy as np
import matplotlib.pyplot as plt
from classifiers.chapter3 import *
from utils import *

%matplotlib inline
plt.rcParams['figure.figsize'] =(10.0, 8.0) # 設定默認繪圖尺寸
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

%load_ext autoreload
%autoreload 2

def rel_error(x, y):
  #計算相對錯誤
  return np.max(np.abs(x - y) /(np.maximum(1e-8, np.abs(x) + np.abs(y))))
# 將CIFAR10資料集的匯入,切片,預處理操作進行封裝
data = get_CIFAR10_data()  #獲取資料
# 訓練資料
X_train =data['X_train']
y_train =data['y_train']
# 驗證資料
X_val = data['X_val']
y_val = data['y_val']
# 測驗資料
X_test = data['X_test']
y_test = data['y_test']
for k, v in data.items():
    print('%s: ' % k, v.shape)
X_train:  (49000, 3, 32, 32)
y_train:  (49000,)
X_val:  (1000, 3, 32, 32)
y_val:  (1000,)
X_test:  (1000, 3, 32, 32)
y_test:  (1000,)

仿射層前向傳播

仿射(affine)傳播就是將各個輸入特征進行加權求和,如果下一層有m個神經元,那就相當于線性代數中的m組線性方程式,

進行測驗:

# 測驗affine_forward 函式
# np.linspaces,規定起點、終點(包含)、回傳array的長度,回傳一個兩端點間數值平均分布的array,
num_inputs = 2
input_shape =(4, 5, 6)
output_dim = 3 #輸出維度

# 2*4*5*6
input_size = num_inputs * np.prod(input_shape)
# 3*4*5*6
weight_size = output_dim * np.prod(input_shape)

# 初始化輸入引數
x = np.linspace(-0.1, 0.5, num=input_size).reshape(num_inputs, *input_shape)
w = np.linspace(-0.2, 0.3, num=weight_size).reshape(np.prod(input_shape), output_dim)
b = np.linspace(-0.3, 0.1, num=output_dim)

# 測驗affine_forward函式
out, _ = affine_forward(x, w, b)
correct_out = np.array([[ 1.49834967,  1.70660132,  1.91485297],
                        [ 3.25553199,  3.5141327,   3.77273342]])

# 比較你的實作結果和正確結果,該誤差應該小于1e-9,
print('測驗 affine_forward 函式:')
print('誤差: ', rel_error(out, correct_out))
測驗 affine_forward 函式:
誤差:  9.769847728806635e-10

仿射層反向傳播

在前向傳播中,實作的啟示就是out=x1w1+x2w2+b這個函式,那仿射層的反向傳播,其實就是將x,w,b各自對應的梯度求出即可,需要注意的是,在快取中我們存盤的是原始資料的四維影像資料,因此,同前向傳播一樣,首先將資料轉換為二維資料后,再進行求解,

# 測驗 affine_backward 函式
from utils.gradient_check import *

x = np.random.randn(10, 2, 3)
w = np.random.randn(6, 5)
b = np.random.randn(5)
dout = np.random.randn(10, 5)

dx_num = eval_numerical_gradient_array(lambda x: affine_forward(x, w, b)[0], x, dout)
dw_num = eval_numerical_gradient_array(lambda w: affine_forward(x, w, b)[0], w, dout)
db_num = eval_numerical_gradient_array(lambda b: affine_forward(x, w, b)[0], b, dout)

_, cache = affine_forward(x, w, b)
dx, dw, db = affine_backward(dout, cache)

# 相對誤差應該小于1e-10
print('測驗 affine_backward 函式:')
print('dx 誤差: ', rel_error(dx_num, dx))
print('dw 誤差: ', rel_error(dw_num, dw))
print('db 誤差: ', rel_error(db_num, db))
測驗 affine_backward 函式:
dx 誤差:  2.6581417320273106e-08
dw 誤差:  2.2266239834308258e-11
db 誤差:  3.035949501360111e-11

ReLU層前向傳播

ReLU激活函式的公式為max(0, x),我們直接使用NumPy提供的內置公式即可,實作 relu_forward 激活函式的前向傳播,并使用下列代碼進行測驗:

# 測驗relu_forward 函式

x = np.linspace(-0.5, 0.5, num=12).reshape(3, 4)

out, _ = relu_forward(x)
correct_out = np.array([[ 0.,          0.,          0.,          0.,        ],
                        [ 0.,          0.,          0.04545455,  0.13636364,],
                        [ 0.22727273,  0.31818182,  0.40909091,  0.5,       ]])

# 比較輸出結果. 其誤差大約為 1e-8
print('測驗 relu_forward 函式:')
print('誤差: ', rel_error(out, correct_out))
測驗 relu_forward 函式:
誤差:  4.999999798022158e-08

ReLU層反向傳播

實作 relu_backward函式并使用數值梯度進行檢驗:

x = np.random.randn(10, 10)
dout = np.random.randn(*x.shape)

dx_num = eval_numerical_gradient_array(lambda x: relu_forward(x)[0], x, dout)

_, cache = relu_forward(x)
dx = relu_backward(dout, cache)

# 其相對誤差大約為1e-12
print('測驗 relu_backward 函式:')
print('dx 誤差: ', rel_error(dx_num, dx))
測驗 relu_backward 函式:
dx 誤差:  3.2756356627391068e-12

完整的神經元層

接下來我們將上述的affine傳播,和ReLU傳播組合在一起,形成一層完整的神經元層,

在你實作affine_relu_forward和affine_relu_backward函式之后,運行下面的代碼進行梯度檢驗:

#初始化,
x = np.random.randn(2, 3, 4)
w = np.random.randn(12, 10)
b = np.random.randn(10)
dout = np.random.randn(2, 10)

#執行ReLU,獲取分析梯度,
out, cache = affine_relu_forward(x, w, b)
dx, dw, db = affine_relu_backward(dout, cache)

#獲取數值梯度,
dx_num = eval_numerical_gradient_array(lambda x: affine_relu_forward(x, w, b)[0], x, dout)
dw_num = eval_numerical_gradient_array(lambda w: affine_relu_forward(x, w, b)[0], w, dout)
db_num = eval_numerical_gradient_array(lambda b: affine_relu_forward(x, w, b)[0], b, dout)

#比較相對誤差,
print('測驗 ReLU神經元相對誤差:')
print('dx 誤差: ', rel_error(dx_num, dx))
print('dw 誤差: ', rel_error(dw_num, dw))
print('db 誤差: ', rel_error(db_num, db))
測驗 ReLU神經元相對誤差:
dx 誤差:  6.029307341263184e-11
dw 誤差:  4.873523095375596e-10
db 誤差:  4.284094461510698e-11

輸出層:Softmax

運行下列代碼以確認我們的實作是正確的:

num_classes, num_inputs = 10, 50
x = 0.001 * np.random.randn(num_inputs, num_classes)

y = np.random.randint(num_classes, size=num_inputs)
dx_num = eval_numerical_gradient(lambda x: softmax_loss(x, y)[0], x, verbose=False)
loss, dx = softmax_loss(x, y)

# 測驗 softmax_loss 函式. 損失值大約為 2.3 dx 誤差大約為 1e-8
print('\n測驗 softmax_loss:')
print('loss: ', loss)
print('dx error: ', rel_error(dx_num, dx))
測驗 softmax_loss:
loss:  2.3026391824439414
dx error:  9.528882883490555e-09

淺層神經網路

現在我們將實作淺層全連接神經網路,打開chapter3\shallow_layer_net.py檔案,閱讀內容完成相應任務后,執行下面代碼進行驗證,

N, D, H, C = 3, 5, 50, 7
X = np.random.randn(N, D)
y = np.random.randint(C, size=N)

std = 1e-2
model = ShallowLayerNet(input_dim=D, hidden_dim=H, num_classes=C, weight_scale=std)

print('測驗初始化 ... ')
W1_std = abs(model.params['W1'].std() - std)
b1 = model.params['b1']
W2_std = abs(model.params['W2'].std() - std)
b2 = model.params['b2']
# assert(W1_std < std / 10, '第一層權重初始化有問題')
# assert(np.all(b1 == 0), '第一層偏置初始化有問題')
# assert(W2_std < std / 10, '第二層權重初始化有問題')
# assert(np.all(b2 == 0), '第二層偏置初始化有問題')

print('測驗前向傳播程序 ... ')
model.params['W1'] = np.linspace(-0.7, 0.3, num=D*H).reshape(D, H)
model.params['b1'] = np.linspace(-0.1, 0.9, num=H)
model.params['W2'] = np.linspace(-0.3, 0.4, num=H*C).reshape(H, C)
model.params['b2'] = np.linspace(-0.9, 0.1, num=C)
X = np.linspace(-5.5, 4.5, num=N*D).reshape(D, N).T
scores = model.loss(X)
correct_scores = np.asarray(
    [[11.53165108,    12.2917344,     13.05181771,    13.81190102,    14.57198434, 15.33206765,    16.09215096],
     [12.05769098,    12.74614105,    13.43459113,    14.1230412,     14.81149128, 15.49994135,    16.18839143],
     [12.58373087,    13.20054771,    13.81736455,    14.43418138,    15.05099822, 15.66781506,    16.2846319 ]])
scores_diff = np.abs(scores - correct_scores).sum()
# assert(scores_diff < 1e-6, '前向傳播有問題')

# print('測驗訓練損失(無正則化)')
y = np.asarray([0, 5, 1])
loss, grads = model.loss(X, y)
correct_loss = 3.4702243556
# assert(abs(loss - correct_loss) < 1e-10, '訓練階段的損失值(無正則化)有問題')

print('測驗訓練損失(正則化0.1)')
model.reg = 1.0
loss, grads = model.loss(X, y)
correct_loss = 26.5948426952
# assert(abs(loss - correct_loss) < 1e-10, '訓練階段的損失值(有正則化)有問題')

for reg in [0.0, 0.7]:
    print('梯度檢驗,正則化系數 = ', reg)
    model.reg = reg
    loss, grads = model.loss(X, y)

    for name in sorted(grads):
        f = lambda _: model.loss(X, y)[0]
        grad_num = eval_numerical_gradient(f, model.params[name], verbose=False)
        print('%s 相對誤差: %.2e' %(name, rel_error(grad_num, grads[name])) )
測驗初始化 ... 
測驗前向傳播程序 ... 
測驗訓練損失(正則化0.1)
梯度檢驗,正則化系數 =  0.0
W1 相對誤差: 1.52e-08
W2 相對誤差: 3.48e-10
b1 相對誤差: 6.55e-09
b2 相對誤差: 4.33e-10
梯度檢驗,正則化系數 =  0.7
W1 相對誤差: 8.18e-07
W2 相對誤差: 2.85e-08
b1 相對誤差: 1.09e-09
b2 相對誤差: 9.09e-10

訓練淺層全連接網路

閱讀 ShallowLayerNet.train()以及predict()函式,確保自己了解整個流程

input_size = 32 * 32 * 3
hidden_size = 100
num_classes = 10
net = ShallowLayerNet(input_size, hidden_size, num_classes)

# 訓練網路
stats = net.train(X_train, y_train, X_val, y_val,
            num_iters=2000, batch_size=500,
            learning_rate=1e-3, learning_rate_decay=0.95,
            reg=0.6, verbose=True)

# 驗證結果
val_acc =(net.predict(X_val) == y_val).mean()
print('最終驗證正確率: ', val_acc)
print('歷史最佳驗證正確率: ', stats['best_val_acc'])
迭代次數 0 / 2000: 損失值 2.394240
迭代次數 100 / 2000: 損失值 1.933027
迭代次數 200 / 2000: 損失值 1.765465
迭代次數 300 / 2000: 損失值 1.647589
迭代次數 400 / 2000: 損失值 1.582696
迭代次數 500 / 2000: 損失值 1.606909
迭代次數 600 / 2000: 損失值 1.512944
迭代次數 700 / 2000: 損失值 1.545821
迭代次數 800 / 2000: 損失值 1.487011
迭代次數 900 / 2000: 損失值 1.611031
迭代次數 1000 / 2000: 損失值 1.502333
迭代次數 1100 / 2000: 損失值 1.413480
迭代次數 1200 / 2000: 損失值 1.604284
迭代次數 1300 / 2000: 損失值 1.431850
迭代次數 1400 / 2000: 損失值 1.334827
迭代次數 1500 / 2000: 損失值 1.464982
迭代次數 1600 / 2000: 損失值 1.335481
迭代次數 1700 / 2000: 損失值 1.418904
迭代次數 1800 / 2000: 損失值 1.367120
迭代次數 1900 / 2000: 損失值 1.418279
最終驗證正確率:  0.512
歷史最佳驗證正確率:  0.512
# 繪制損失函式變化曲線
plt.subplot(2, 1, 1)
plt.plot(stats['loss_history'])
plt.title('Loss history')
plt.xlabel('Iteration')
plt.ylabel('Loss')

plt.subplot(2, 1, 2)
plt.plot(stats['train_acc_history'], label='train')
plt.plot(stats['val_acc_history'], label='val')
plt.plot([0.5] * len(stats['val_acc_history']), 'k--')
plt.title('Classification accuracy history')
plt.xlabel('Epoch')
plt.ylabel('Clasification accuracy')
# 添加圖示
plt.legend()
# 控制布局
plt.tight_layout()
plt.show()

?
png
?

深層全連接網路

接下來我們將實作深層的全連接網路,由于我們以及實作了淺層網路,深層網路的實作將變得很簡單,

深層神經網路相比于淺層神經網路,雖然僅僅是隱藏層數量變多而已,但它卻具有了淺層網路沒有的強大能力,由于我們已經實作了淺層網路,深層網路的實作將變得非常簡單,現在要做的僅僅是將淺層網路中固定的單隱藏層變成任意多層即可,在深層全連接神經網路,隱藏層使用ReLU作為激活函式,輸出層使用Softmax作為分類器,

N, D, H1, H2,H3, C = 2, 15, 20, 30, 20, 10
X = np.random.randn(N, D)
y = np.random.randint(C, size=(N,))

for reg in [0, 0.11, 3.14]:
    print('權重衰減系數= ', reg)
    model = FullyConnectedNet(input_dim=D,hidden_dims=[H1, H2,H3],num_classes=C,reg=reg, weight_scale=5e-2)

    loss, grads = model.loss(X, y)
    print('初始化化損失值: ', loss)

    for name in sorted(grads):
        f = lambda _: model.loss(X, y)[0]
        grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)
        print('%s 相對誤差: %.2e' %(name, rel_error(grad_num, grads[name])))
權重衰減系數=  0
初始化化損失值:  2.302395002878659
W1 相對誤差: 7.33e-06
W2 相對誤差: 2.52e-07
W3 相對誤差: 1.21e-06
W4 相對誤差: 3.73e-07
b1 相對誤差: 5.57e-07
b2 相對誤差: 1.47e-08
b3 相對誤差: 1.74e-06
b4 相對誤差: 1.38e-10
權重衰減系數=  0.11
初始化化損失值:  2.5387725473271425
W1 相對誤差: 1.22e-07
W2 相對誤差: 8.56e-07
W3 相對誤差: 1.27e-07
W4 相對誤差: 7.80e-08
b1 相對誤差: 7.76e-08
b2 相對誤差: 4.06e-07
b3 相對誤差: 3.10e-09
b4 相對誤差: 9.36e-11
權重衰減系數=  3.14
初始化化損失值:  8.877932640499402
W1 相對誤差: 1.11e-08
W2 相對誤差: 9.18e-08
W3 相對誤差: 5.11e-08
W4 相對誤差: 4.26e-08
b1 相對誤差: 3.60e-07
b2 相對誤差: 9.61e-08
b3 相對誤差: 2.56e-08
b4 相對誤差: 3.55e-10
# 在小資料集上測驗訓練效果,正常情況下應該出現嚴重過擬合現象
input_size = 32 * 32 * 3
num_classes = 10
num_train = 50

X_train_small= X_train[:num_train]
y_train_small= y_train[:num_train]
w= 1e-1
l = 1e-3
net = FullyConnectedNet(input_size ,[100,100,100,100,100] , num_classes, weight_scale=w ,reg=0.6)
# 訓練網路
stats = net.train(X_train_small, y_train_small, X_val, y_val,
            num_iters=20, batch_size=25,
            learning_rate=l, learning_rate_decay=0.95,
            verbose=True)

plt.subplot(2, 1, 1)
plt.plot(stats['loss_history'],'o')
plt.title('Loss history')
plt.xlabel('Iteration')
plt.ylabel('Loss')

plt.subplot(2, 1, 2)
plt.plot(stats['train_acc_history'], label='train')
plt.plot(stats['val_acc_history'], label='val')
plt.title('Classification accuracy history')
plt.xlabel('Epoch')
plt.ylabel('Clasification accuracy')
# 添加圖示
plt.legend()
# 控制布局
plt.tight_layout()
plt.show()
iteration 0 / 20: loss 1107.251324

png

input_size = 32 * 32 * 3
num_classes = 10
net = FullyConnectedNet(input_size,[100,100],num_classes,reg=0.6,weight_scale=2e-2)
# 訓練網路
stats = net.train(X_train, y_train, X_val, y_val,
            num_iters=2000, batch_size=500,
            learning_rate=8e-3, learning_rate_decay=0.95,
            verbose=False)
# 測驗性能
val_acc =(net.predict(X_val) == y_val).mean()
print('驗證精度: ', val_acc)
print('最佳驗證精度: ', stats['best_val_acc'])
plt.subplot(2, 1, 1)
plt.plot(stats['loss_history'],'o')
plt.title('Loss history')
plt.xlabel('Iteration')
plt.ylabel('Loss')

plt.subplot(2, 1, 2)
plt.plot(stats['train_acc_history'], label='train')
plt.plot(stats['val_acc_history'], label='val')
plt.title('Classification accuracy history')
plt.xlabel('Epoch')
plt.ylabel('Clasification accuracy')
# 添加圖示
plt.legend()
# 控制布局
plt.tight_layout()
plt.show()
驗證精度:  0.478
最佳驗證精度:  0.487

png

best_net = None
##########################################################################
#               任務:盡可能訓練一個最佳的深層神經網路                   #
##########################################################################
input_size = 32 * 32 * 3
num_classes = 10

# 進行探查
lr = np.logspace(-9, 0, num=5)
ws = np.logspace(-9, 0, num=5)
# 記錄最好的引數
best_lr = 0.0
best_ws = 0.0
best_val_acc = 0.0

for l in lr:
    for w in ws:
        net = FullyConnectedNet(input_size, [32*32, 320, 160, 32], num_classes, reg=0.6,weight_scale=w)
        stats = net.train(X_train, y_train, X_val, y_val,
                    num_iters=1000, batch_size=500,
                    learning_rate=l, learning_rate_decay=0.95,
                    verbose=False)
        # 測驗性能
        val_acc =(net.predict(X_val) == y_val).mean()
        if val_acc > best_val_acc:
            best_net = net
            best_lr = l
            best_ws = w
            best_val_acc = val_acc

print('驗證精度: ', val_acc)
print('最佳驗證精度: ', stats['best_val_acc'])

##########################################################################
#                      結束編碼                                          #
##########################################################################

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/344104.html

標籤:AI

上一篇:【知識圖譜】知識表示

下一篇:機器學習基礎知識之概率論的隨機變數及其分布

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more