神经网络实例Python

(keras--tensorflow2.0)制作个人的神经网络训练数据集案例 我们之前用到的用于训练网络的数据集大部份为常用的经典数据集,可以 通过 TensorFlow 几行代码即可完成数据集的下载、加载以及预处理工作,这无疑大大的提升了算 法的研究效率,对于刚入门的新手来说比较友好。然而在实际应用中,针对于不同的应用场景,算法的数据集也各不相同。因此我们就需要自定义数据集,来完场网络的训练。下面我们就要对水泥裂缝图片进行数据集的制作: 第一步、收集裂缝的图片 笔者收集... 阅读详情

      本文采用一个模拟数据集进行神经网络的训练,相关知识点包括数据预处理、BN层、神经网络模型、梯度反向传播、梯度检查、监测训练过程、超参数随机搜索等,使读者掌握一个完整的机器学习流程。

1、生成数据

     生成一个线性不可分的数据集,它是一个随时间增长的振荡数据。

import numpy as np
import matplotlib.pyplot as plt

# 显示数据
def show_data(X, labels):
    plt.scatter(X[:, 0], X[:, 1], c=labels, s=10, cmap=plt.cm.Spectral)
    plt.show()

def gen_random_data(dim, N_class, num_samp_per_class):
    num_examples = num_samp_per_class*N_class
    X = np.random.randn(num_examples, dim) # data matrix (each row = single example)
    labels = np.random.randint(N_class, size = num_examples) # class labels
    show_data(X, labels)
    return (X, labels)

dim = 2  # dimensionality
N_class = 4  # number of classes
layer_param = [dim, 10, 20, N_class]
(X, labels) = gen_random_data(dim, N_class, num_samp_per_class=20)

# 生成数据
def gen_toy_data(dim, N_class, num_samp_per_class):
    num_examples = num_samp_per_class * N_class
    X = np.zeros((num_examples, dim))  # data matrix
    labels = np.zeros(num_examples, dtype='uint8')  # class labels
    for j in range(N_class):
        ix = range(num_samp_per_class * j, num_samp_per_class * (j + 1))
        x = np.linspace(-np.pi, np.pi, num_samp_per_class) + 5  # x axis
        y = np.sin(x + j * np.pi / (0.5 * N_class))
        y += 0.2 * np.sin(10 * x + j * np.pi / (0.5 * N_class))
        y += 0.25 * x + 10
        y += np.random.randn(num_samp_per_class) * 0.1  # noise

        X[ix] = np.c_[x, y]
        labels[ix] = j

    show_data(X, labels)
    return (X, labels)

2、数据预处理

中心化和归一化

def normalize(X):
    # (x-u)/delta
    mean = np.mean(X, axis=0)
    X_norm = X - mean
    std = np.std(X_norm, axis=0)
    X_norm /= std + 10**(-5)
    return (X_norm, mean, std)

PCA白化

def PCA_white(X):
    mean = np.mean(X, axis=0)
    X_norm = X - mean
    cov = np.dot(X_norm.T, X_norm)/X_norm.shape[0]
    U,S,V = np.linalg.svd(cov)
    X_norm = np.dot(X_norm, U)
    X_norm /= np.sqrt(S + 10**(-5))
    return (X_norm, mean, U, S)

数据集按比例2:1:1随机分为训练集、验证集和测试集

def split_data(X, labels):
    split1 = 2
    split2 = 4
    num_examples = X.shape[0]
    shuffle_no = list(range(num_examples))
    np.random.shuffle(shuffle_no)

    X_train = X[shuffle_no[:num_examples//split1]]
    labels_train = labels[shuffle_no[:num_examples//split1]]
    X_val = X[shuffle_no[num_examples//split1:num_examples//split1+num_examples//split2]]
    labels_val = labels[shuffle_no[num_examples//split1:num_examples//split1+num_examples//split2]]
    X_test = X[shuffle_no[-num_examples//4:]]
    labels_test = labels[shuffle_no[-num_examples//4:]]
    return (X_train, labels_train, X_val, labels_val, X_test, labels_test)

进行预处理

def data_preprocess(X_train, X_val, X_test):
    (X_train_pca, mean, U, S) = PCA_white(X_train)
    X_val_pca = np.dot(X_val - mean, U)
    X_val_pca /= np.sqrt(S + 10**(-5))
    X_test_pca = np.dot(X_test - mean, U)
    X_test_pca /= np.sqrt(S + 10**(-5))
    return (X_train_pca, X_val_pca, X_test_pca)

3、网络模型

超参数主要是网络深度(隐含层的数量)和每层神经元的数量。可以采用list结构存储每层神经元数量,包括输入层和输出层。

初始化

# layer_param = [dim, 100, 100, N_class]
def initialize_parameters(layer_param):
    weights = []
    biases = []
    vweights = []
    vbiases = []

    for i in range(len(layer_param) - 1):
        in_depth = layer_param[i]
        out_depth = layer_param[i+1]
        std = np.sqrt(2/in_depth)*0.5
        weights.append(std*np.random.randn(in_depth, out_depth))
        biases.append((np.zeros((1, out_depth))))
        vweights.append(np.zeros((in_depth, out_depth)))
        vbiases.append(np.zeros((1, out_depth)))
    return (weights, biases, vweights, vbiases)

前向计算

def forward(X, layer_param, weights, biases):
    hiddens = []
    hiddens.append(X)
    for i in range(len(layer_param)-2):
        hiddens.append(np.maximum(0, np.dot(hiddens[i], weights[i]) + biases[i]))
    # 最后一层不需要非线性激活函数
    scores = np.dot(hiddens[-1], weights[-1]) + biases[-1]
    return (hiddens, scores)

计算softmax数据损失值

def data_loss_softmax(scores, labels):
    num_examples = scores.shape[0]
    exp_scores = np.exp(scores)
    exp_cores_sum = np.sum(exp_scores, axis=1)
    corect_probs = exp_scores[range(num_examples), labels]/exp_cores_sum
    corect_logprobs = -np.log(corect_probs)
    data_loss = np.sum(corect_logprobs)/num_examples
    return data_loss

计算L2范数损失

def reg_L2_loss(weights, reg):
    reg_loss = 0
    for weight in weights:
        reg_loss += 0.5*reg*np.sum(weight*weight)
    return reg_loss

计算分值矩阵梯度

def dscores_softmax(scores, labels):
    num_examples = scores.shape[0]
    exp_scores = np.exp(scores)
    probs = exp_scores/np.sum(exp_scores, axis=1, keepdims=True)
    dscores = probs
    dscores[range(num_examples), labels] -= 1
    dscores /= num_examples
    return dscores

准确率预测,和前向函数几乎一致,只是不需要保存hidden神经元

def predict(X, labels, layer_param, weights, biases):
    hidden = X
    for i in range(len(layer_param)-2):
        hidden = np.maximum(0, np.dot(hidden, weights[i]) + biases[i])
    scores = np.dot(hidden, weights[-1]) + biases[-1]
    predicted_class = np.argmax(scores, axis=1)
    right_class = predicted_class == labels
    return np.mean(right_class)

梯度反向传播算法

def gradient_backprop(dscores, hiddens, weights, biases, reg):
    dweights = []
    dbiases = []
    dhidden = dscores
    for i in range(len(hiddens)-1, -1, -1):
        dweights.append(np.dot(hiddens[i].T, dhidden) + reg*weights[i])
        dbiases.append(np.sum(dhidden, axis=0, keepdims=True))
        dhidden = np.dot(dhidden, weights[i].T)
        dhidden[hiddens[i]<=0] = 0
    return (dweights, dbiases)

4、梯度检查

对每层的权重和偏置进行梯度检查

def check_gradient(X, labels, layer_param, check_weight_or_bias):
    (X, labels) = gen_random_data(dim, N_class, num_samp_per_class=200)
    (weights, biases, vweights, vbiases) = initialize_parameters(layer_param)
    reg = 10**(-9)
    step = 10**(-5)
    for layer in range(len(weights)):
        if check_weight_or_bias:
            row = np.random.randint(weights[layer].shape[0])
            col = np.random.randint(weights[layer].shape[1])
            param = weights[layer][row][col]
        else:
            row = np.random.randint(weights[layer].shape[1])
            param = biases[layer][0][row]
        # 前向计算
        (hiddens, scores) = forward(X, layer_param, weights, biases)
        dscores = dscores_softmax(scores, labels)
        # 反向计算
        (dweights, dbiases) = gradient_backprop(dscores, hiddens, weights, biases, reg)
        if check_weight_or_bias:
            danalytic = dweights[-1-layer][row][col]
        else:
            danalytic = dbiases[-1-layer][0][row]
        if check_weight_or_bias:
            weights[layer][row][col] = param - step
        else:
            biases[layer][0][row] = param - step
        (hiddens, scores) = forward(X, layer_param, weights, biases)
        data_loss1 = data_loss_softmax(scores, labels)
        reg_loss1 = reg_L2_loss(weights, reg)
        loss1 = data_loss1 + reg_loss1
        if check_weight_or_bias:
            weights[layer][row][col] = param + step
        else:
            biases[layer][0][row] = param + step
        (hiddens, scores) = forward(X, layer_param, weights, biases)
        data_loss2 = data_loss_softmax(scores, labels)
        reg_loss2 = reg_L2_loss(weights, reg)
        loss2 = data_loss2 + reg_loss2
        dnumeric = (loss2 - loss1)/(2*step)

        print(layer, data_loss1, data_loss2)
        error_relative = np.abs(danalytic - dnumeric)/np.maximum(danalytic, dnumeric)
        print(danalytic, dnumeric, error_relative)

5、参数优化

采用Nesterov动量优化方法,同时函数返回了参数更新比例

def nesterov_momentumSGD(vparams, params, dparams, lr, mu):
    update_ratio = []
    for i in range(len(params)):
        pre_vparam = vparams[i]
        vparams[i] = mu*vparams[i] - lr*dparams[-1-i]
        update_param = vparams[i] + mu * (vparams[i] - pre_vparam)
        params[i] += update_param
        update_ratio.append(np.sum(np.abs(update_param))
                            /np.sum(np.abs(params[i])))
    return update_ratio

6、训练网络

初始化参数,前向计算,计算训练集和验证集的准确率,计算数据损失和正则化损失,梯度反向传播,进行学习率指数退化,可视化

def train_net(X_train, labels_train, layer_param, lr,
              lr_decay, reg, mu, max_epoch, X_val, labels_val):
    lr0 = lr
    (weights, biases, vweights, vbiases) = initialize_parameters(layer_param)
    epoch = 0
    data_losses = []
    reg_losses = []
    val_accuracy = []
    train_accuracy = []
    weights_update_ratio = []
    baises_update_ratio = []
    while epoch < max_epoch:
        (hiddens, scores) = forward(X_train, layer_param, weights, biases)
        val_accuracy.append(predict(X_val, labels_val, layer_param, weights, biases))
        train_accuracy.append(predict(X_train, labels_train, layer_param, weights, biases))
        data_loss = data_loss_softmax(scores, labels_train)
        reg_loss = reg_L2_loss(weights, reg)
        dscores = dscores_softmax(scores, labels_train)
        (dweights, dbiases) = gradient_backprop(dscores, hiddens, weights, biases, reg)
        weights_update_ratio.append(nesterov_momentumSGD(
            vweights, weights, dweights, lr, mu
        ))
        baises_update_ratio.append(nesterov_momentumSGD(
            vbiases, biases, dbiases, lr, mu
        ))
        data_losses.append(data_loss)
        reg_losses.append(reg_loss)
        epoch += 1
        lr *= lr_decay
    # 可视化数据损失、训练集和验证集准确率
    plt.close()
    fig = plt.figure('loss')
    ax = fig.add_subplot(2, 1, 1)
    ax.grid(True)
    ax2 = fig.add_subplot(2, 1, 2)
    ax2.grid(True)
    plt.xlabel('log10(lr)=' + str(round((np.log10(lr0)), 2)) + ' ' + 'log10(reg)=' + str(round((np.log10(reg)), 2)),
               fontsize=14)
    plt.ylabel('                              accuracy       log10(data loss)', fontsize=14)
    ax.scatter(np.arange(len(data_losses)), np.log10(data_losses), c='b', marker='.')
    #    ax2.scatter(np.arange(len(reg_losses)), np.log10(reg_losses), c='r',marker='*')
    ax2.scatter(np.arange(len(val_accuracy) - 0), val_accuracy[0:], c='r', marker='*')
    ax2.scatter(np.arange(len(val_accuracy) - 0), train_accuracy[0:], c='g', marker='.')
    #    ax2.scatter(np.arange(len(val_accuracy)), np.log10(1-np.array(val_accuracy)), c='r',marker='*')
    #    ax2.scatter(np.arange(len(val_accuracy)), np.log10(1-np.array(train_accuracy)), c='g',marker='.')
    plt.show()

    # %% 对数显示每层权重和偏置的更新率,合理值在10**(-3)
    for layer in range(len(weights)):
        wur = []
        for i in range(len(weights_update_ratio)):
            wur.append(weights_update_ratio[i][layer])
        bur = []
        for i in range(len(baises_update_ratio)):
            bur.append(baises_update_ratio[i][layer])
        plt.close()
        fig = plt.figure('update ratio')
        ax = fig.add_subplot(2, 1, 1)
        ax.grid(True)
        ax2 = fig.add_subplot(2, 1, 2)
        ax2.grid(True)
        plt.xlabel('log10(lr)=' + str(round((np.log10(lr0)), 2)) + ' ' + 'log10(reg)=' + str(round((np.log10(reg)), 2)),
                   fontsize=14)
        ax.scatter(np.arange(len(wur)), np.log10(wur), c='b', marker='.')
        ax2.scatter(np.arange(len(bur)), np.log10(bur), c='r', marker='*')
        plt.show()

    return (data_losses, reg_losses, weights, biases, val_accuracy)

7、过拟合小数据集

def overfit_tinydata(lr=10 ** (-0.0), lr_decay=1, mu=0.9, reg=0, max_epoch=100):
    (X,labels) = gen_toy_data(dim, N_class, num_samp_per_class=2)
    X,_,_,_ = PCA_white(X)
    layer_param = [dim, 100, 100, N_class]
    (data_losses, reg_losses, weights, biases, accuracy) = train_net(X, labels, layer_param, lr, lr_decay, reg, mu,
                                                                     max_epoch, X, labels)

    return (data_losses, reg_losses, accuracy)

8、超参数随机搜索

def hyperparam_random_search(X_train, labels_train,
                             X_val, labels_val,
                             layer_param, num_try=10,
                             lr=[-1, -5], lr_decay=1,
                             mu=0.9, reg=[-2.0, -5.0],
                             max_epoch=500):
    minlr = min(lr)
    maxlr = max(lr)
    randn = np.random.rand(num_try*2)
    lr_array = 10**(minlr + (maxlr-minlr)*randn[0:num_try])
    minreg = min(reg)
    maxreg = max(reg)
    reg_array = 10**(minreg + (maxreg-minreg)*randn[num_try:2*num_try])
    lr_regs = zip(lr_array, reg_array)
    for lr_reg in lr_regs:
        (data_loss, reg_loss, weights, biases, val_accuracy) = train_net(X_train, labels_train, layer_param,
                    lr_reg[0], lr_decay, lr_reg[1], mu, max_epoch,
                    X_val, labels_val)
    return (weights, biases)
dim = 2  # dimensionality
N_class = 4  # number of classes
layer_param = [dim, 100, 100, N_class]
(X,labels) = gen_toy_data(dim, N_class, num_samp_per_class = 200)
(X_train, labels_train, X_val, labels_val, X_test, labels_test) = split_data(X, labels)
(X_train_pca, X_val_pca, X_test_pca) = data_preprocess(X_train, X_val, X_test)
(weights, biases) = hyperparam_random_search(X_train_pca, labels_train, X_val_pca, labels_val, layer_param,
                         num_try = 2, lr=[-0.1, -0.2], lr_decay=1, mu=0.9, reg=[-2, -5], max_epoch=2000)

上面设置lr=[-0.1, -0.2]时,数据损失波动很大且下降很快,参数更新率也过高

修改lr=[-1.5, -2.5],数据损失基本无波动,训练集和验证集的准确率趋于饱和,过拟合现象不明显

9、评估模型

accuracy = predict(X_test_pca, labels_test, layer_param, weights, biases)
print(accuracy) # 0.785

10、增加BN层

    增加BN层,不会改变程序的总体流程。但是需要注意的是,这里不再需要偏置参数,而是增加了标准查和均值参数,同时需要保留BN层的一些中间结果,如均值和方差等。注意,由于采用全部样本进行训练,所以均值和方差不需要进行移动平均。

BN_EPSILON = 10**(-5)

def initialize_parameters_BN(layer_param):
    weights = []  
    gammas = []
    betas = []
    
    vweights = []
    vgammas = []
    vbetas = []
        
    for i in range(len(layer_param) - 1):  
        in_depth = layer_param[i]
        out_depth = layer_param[i+1]
        std = np.sqrt(2/in_depth)
        weights.append( std * np.random.randn(in_depth, out_depth) )  
        gammas.append( np.ones((1, out_depth)) ) 
        betas.append( np.zeros((1, out_depth)) )          
                
        vweights.append( np.zeros( (in_depth, out_depth) ) )
        vgammas.append( np.zeros((1, out_depth)) )
        vbetas.append( np.zeros((1, out_depth)) )         
    
    params = (weights, gammas, betas) 
    vparams = (vweights, vgammas, vbetas) 
    return (params, vparams)

def BN_forward(X, gamma, beta):   
    mu = np.mean(X, axis=0)
    var = np.var(X, axis=0)
    std = np.sqrt(var + BN_EPSILON)
    X_hat = (X - mu)/std
    Y = gamma*X_hat + beta    
    bn_cache = (mu, var, std)

    return (Y, bn_cache, X_hat)

def BN_backprop(dY, X, X_hat, bn_cache, gamma, beta):
    (mu, var, std) = bn_cache
    batch = X.shape[0]
    dX_hat = gamma*dY
    dbeta = np.sum(dY, axis=0, keepdims=True)
    dgamma = np.sum(X_hat*dY, axis=0, keepdims=True)
    
    dX = dX_hat/std
    dmu = -np.sum(dX_hat, axis=0, keepdims=True)/std
    dstd = -1/(std*std) * np.sum((X - mu)*dX_hat, axis=0)
    dvar = 1/2*(var**(-0.5))*dstd
    dX += 2*(X - mu)/batch * dvar
    dX += dmu/batch   
    
    return (dX, dgamma, dbeta)     
        

def forward_BN(X, layer_param, params):
    hiddens = []
    bn_ins = []
    bn_caches = []
    bn_hats = []
    
    (weights, gammas, betas) = params
    hiddens.append(X)
    for i in range(len(layer_param)-1):  
        hidden = np.dot(hiddens[i], weights[i]) # 1
        bn_ins.append(hidden)
        (hidden, bn_cache, bn_hat) = BN_forward(hidden, gammas[i], betas[i]) # 2
        bn_hats.append(bn_hat)
        bn_caches.append(bn_cache)    
        if i < len(layer_param)-2:
            hiddens.append(np.maximum(0, hidden)) # 3
        else:
            scores = hidden # 4
    return (hiddens, scores, bn_ins, bn_hats, bn_caches)

def predict_BN(X, labels, layer_param, params):
    (weights, gammas, betas) = params 
    hidden = X
    for i in range(0,len(layer_param)-1):  
        hidden = np.dot(hidden, weights[i])
        (hidden, bn_cache, bn_hat) = BN_forward(hidden, gammas[i], betas[i])
        if i < len(layer_param)-2:
            hidden = np.maximum(0, hidden)
        else:
            scores = hidden
    
    predicted_class = np.argmax(scores, axis=1)
    rigth_class = predicted_class == labels         
    return np.mean(rigth_class)

def gradient_backprop_BN(dscores, params, hiddens, bn_ins, bn_hats, bn_caches, reg):
    (weights, gammas, betas) = params   
    dweights = []
    dgammas = []
    dbetas = []
    
    dhidden = dscores    
    for i in range(len(hiddens)-1, -1, -1):
        (dhidden, dgamma, dbeta) = BN_backprop(dhidden, bn_ins[i], bn_hats[i], bn_caches[i], gammas[i], betas[i])
        dgammas.append(dgamma)
        dbetas.append(dbeta)         
        dweights.append(np.dot(hiddens[i].T, dhidden) + reg*weights[i] )
        dhidden = np.dot(dhidden, weights[i].T)
        dhidden[hiddens[i] <= 0] = 0               
    return (dweights, dgammas, dbetas)

#%%
def train_net_BN(data, layer_param, super_params, max_epoch):
    
    (X_train, labels_train, X_val, labels_val) = data
    (lr_w, lr_decay, mu_w, lr_bn, mu_bn, reg) = super_params
    (params, vparams) = initialize_parameters_BN(layer_param)  
    epoch = 0
    
    data_losses = []
    reg_losses = []    
    val_accuracy = []
    train_accuracy = []
    weights_update_ratio = []  
    gammas_update_ratio = []
    betas_update_ratio = []
    
    while epoch < max_epoch:    
        (hiddens, scores, bn_ins, bn_hats, bn_caches) = forward_BN(X_train, layer_param, params) 
        
        val_accuracy.append(predict_BN(X_val, labels_val, layer_param, params)) 
        train_accuracy.append(predict_BN(X_train, labels_train, layer_param, params)) 
        
        data_loss = data_loss_softmax(scores, labels_train)    
        reg_loss = reg_L2_loss(params[0], reg)    
        dscores = dscores_softmax(scores, labels_train)  
        
        (dweights, dgammas, dbetas) = gradient_backprop_BN(dscores, params, hiddens, bn_ins, bn_hats, bn_caches, reg)    
        weights_update_ratio.append(nesterov_momentumSGD(vparams[0], params[0], dweights, lr_w, mu_w))
        gammas_update_ratio.append(nesterov_momentumSGD(vparams[1], params[1], dgammas, lr_bn, mu_bn))
        betas_update_ratio.append(nesterov_momentumSGD(vparams[2], params[2], dbetas, lr_bn, mu_bn))
        
        data_losses.append(data_loss)
        reg_losses.append(reg_loss)        
        epoch += 1
        lr_w *= lr_decay
  
    # 省略可视化结果代码      
    plt.close()
    fig=plt.figure('loss')
    ax=fig.add_subplot(2,1,1)
#    ax.set_title('data loss')
    ax.grid(True)
    ax2=fig.add_subplot(2,1,2)
#    ax2.set_title('reg loss')
    ax2.grid(True)
    plt.xlabel( 'log10(lr_w)=' + str(round((np.log10(lr_w)),2)) + ' ' +  'log10(reg)=' + str(round((np.log10(reg)),2)), fontsize=14)
    plt.ylabel('                              accuracy       log10(data loss)', fontsize=14)     
    ax.scatter(np.arange(len(data_losses)), np.log10(data_losses), c='b',marker='.')
#    ax2.scatter(np.arange(len(reg_losses)), np.log10(reg_losses), c='r',marker='*')
    
#    ax2.scatter(np.arange(len(val_accuracy)), np.log10(1-np.array(val_accuracy)), c='r',marker='*')
#    ax2.scatter(np.arange(len(val_accuracy)), np.log10(1-np.array(train_accuracy)), c='g',marker='.')
    ax2.scatter(np.arange(len(val_accuracy)-0), val_accuracy[0:], c='r',marker='*')
    ax2.scatter(np.arange(len(val_accuracy)-0), train_accuracy[0:], c='g',marker='.')
    plt.show() 
    
    #%%
    for layer in range(len(params[0])):
        wur = []
        for i in range(len(weights_update_ratio)):
            wur.append( weights_update_ratio[i][layer] )            
        bur = []
        for i in range(len(betas_update_ratio)):
            bur.append( betas_update_ratio[i][layer] )
        
        plt.close()
        fig=plt.figure('update ratio')
        ax=fig.add_subplot(2,1,1)
        ax.grid(True)
        ax2=fig.add_subplot(2,1,2)
        ax2.grid(True)
        plt.xlabel( 'log10(lr_w)=' + str(round((np.log10(lr_w)),2)) + ' ' +  'log10(reg)=' + str(round((np.log10(reg)),2)), fontsize=14)
#        plt.ylabel('log10(baises_update_ratio) log10(weights_update_ratio)', fontsize=14)     
        ax.scatter(np.arange(len(wur)), np.log10(wur), c='b',marker='.')
        ax2.scatter(np.arange(len(bur)), np.log10(bur), c='r',marker='*')
        plt.show() 

 

 

卷积神经网络python实例,python卷积神经网络图像 上周末利用python简单实现了一个卷积神经网络,只包含一个卷积层和一个maxpooling层,pooling层后面的多层神经网络采用了softmax形式的输出。实验输入仍然采用MNIST图像使用10个featuremap时,卷积和pooling的结果分别如下所示。部分源码如下:[python] viewplain copy#coding=utf-8'''''Created on 2014年11月30日@author: Wangliaofan'''import numpyimport structimpor 阅读详情

相关推荐

bp神经网络推导及python实例

bp神经网络 BP(back propagation,反向传播)神经网络(neural network),通常指具有三层网络结构的浅层神经网络。神经网络由一个个神经元(Neuron)组成,神经元由输入、计算、输出单元组成。 对应上图输入为x1,x2,⋯&ThinSpace;,xnx_1,x_2,\cdots,x_nx1​,x2​,⋯,xn​和截距+1+1+1,输出为: y^=hw,b(X...

猫哥 3989

神经网络训练的一般步骤,神经网络是怎么训练的

指对人工神经网络训练。向网络足够多的样本,通过一定算法调整网络的结构(主要是调节权值),使网络的输出与预期值相符,这样的过程就是神经网络训练。根据学习环境中教师信号的差异,神经网络训练大致可分为二分割学习、输出值学习和无教师学习三种。

wenangou的博客 9181

物理信息神经网络PINN实例及其Python实现

物理信息神经网络(PINN)是一种融合深度学习与物理定律的新型机器学习模型。它通过将物理方程(PDE/ODE)作为约束条件融入神经网络的损失函数,实现了数据拟合与物理规律的双重满足。与传统神经网络相比,PINN具有更强的泛化能力和物理可解释性。其核心技术包括自动微分、多组件损失函数(数据损失+物理损失+边界条件损失)和全连接网络架构。PINN在科学计算中展现出独特优势,能有效解决复杂物理系统的建模问题,尤其适用于数据稀疏或噪声大的场景。该模型由Maziar Raissi等人于2019年首次系统提出,为物理系

qq_49609070的博客 2479

神经网络训练过程概述

本文简要概述了神经网络的训练过程,即前向传播和反向传播

python_plus的博客 3471

Python神经网络入门与实战,python神经网络算法实例

用keras框架较为方便首先安装anaconda,然后通过pip安装keras以下转自wphh的博客。#coding:utf-8''' GPU run command: THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python CPU run command: python 2016.06.06更新:这份代码是keras开发初期写的,当时keras还没有现在这么流行,文档也还没那么丰富,所以我当时写了一些

aifamao6的博客 414

Python实现基于GRNN广义回归神经网络进行光伏功率预测模型的详细项目实例

能源预测Python实现基于GRNN广义回归神经网络进行光伏功率预测模型的详细项目实例(含完整的程序,GUI设计和代码详解)_GRNN在python有现成的吗资源-优快云文库 https://download.youkuaiyun.com/download/xiaoxingkongyuxi/90875655能源预测Python实现基于GRNN广义回归神经网络进行光伏功率预测模型的详细项目实例(含完整的程序,GUI设计和代码详解)_GRNN在python有现成的吗资源-优快云文库 https://download

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1121

python神经网络实例_TensorFlow神经网络函数拟合实例(基于Python)

from __future__ import print_functionimport tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltimport timedef add_layer(inputs, in_size, out_size, activation_function=None):Weights = tf....

weixin_39616367的博客 317

简述神经网络的训练过程?

简述神经网络的训练过程? 训练神经网络由以下基本步骤构成: 步骤1:神经网络的初始化(Weights Initalization):初始化权值(weights)和偏差(bias)。可以理解为方程Y =wX+b中的w和b。 步骤2:正向传播(前向传播, forward propagation):使用给定的输入X、权重W和偏差b,对于每一层,我们计算输入和权重的线性组合值,然后将激活函数应用于该线性组合值。 在最后一层,如果是一个二分类问题使用sigmoid函数计算概率值,如果是多分类使用s

data+scenario+science+insight 1万+

python神经网络实例_Python编程实现的简单神经网络算法示例

本文实例讲述了Python编程实现的简单神经网络算法。分享给大家供大家参考,具体如下:python实现二层神经网络包括输入层和输出层# -*- coding:utf-8 -*-#! python2import numpy as np#sigmoid functiondef nonlin(x, deriv = False):if(deriv == True):return x*(1-x)return...

weixin_39908985的博客 721

Keras深度学习实战(1)——神经网络基础与模型训练过程详解

神经网络是一种性能强大的学习算法,其灵感来自大脑的运作方式。类似于神经元在大脑中彼此连接的方式,神经网络获取输入后,通过某些函数在网络中进行传递输入信息,连接在其后的一些神经元会被激活,从而产生输出。本文主要介绍神经网络中重要的基础知识,然后使用 Python 从零开始构建神经网络的训练流程,包括前向传播和反向传播,更直观的了解神经网络的通用训练流程。............

盼小辉丶的博客 9万+

三运放仪表放大器电路设计全解析:从原理到PCB布局避坑指南

本文深度解析三运放仪表放大器电路设计,从差分放大器原理演进到经典三运放架构,详细阐述了其高共模抑制比(CMRR)和高输入阻抗的核心优势。文章重点剖析了电阻匹配、PCB布局对称性等关键设计要点对性能的影响,并提供了基于LTspice的仿真分析与从原理图到PCB布局、焊接调试的全流程实战避坑指南,助力实现高精度信号调理。

redis7keeper的博客 788

python 神经网络实例

  #http://python.jobbole.com/82758/ # import numpy as np # # # # sigmoid function # def nonlin(x, deriv=False): # if (deriv == True): # return x * (1 - x) # return 1 / (1 + np.exp(-x)...

weixin_34159110的博客 326

微带天线理论学习笔记(1)

微带天线的概念是由Deschamps于1953年提出来的,它是在一块厚度远小于工作波长的介质基片的一面敷以金属辐射片、一面全部敷以金属薄层作接地板而成。辐射片可以根据不同的要求设计成各种形状。微带天线具有质量轻、体积小和易于制造等优点,广泛应用于个人无线通信中。

qq_36521926的博客 6227

CV学习笔记-BP神经网络代码Python实例

实现简单的BP神经网络的实例编写,面向对象的思路编写,可以手动调参方便更改,更改应哟用不必大量重构,欢迎初学者学习,本篇代码涵盖了神经网络的输入层、隐藏层、输出层,实现了简单的实例使用。......

Moresweet 猫甜 7516

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2477

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 244

python神经网络实例_python 神经网络实例

#1.#关于非线性转化方程(non - linear#transformation#function)##sigmoid函数(S#曲线)用来作为activation#function:##1.1#双曲函数(tanh)##1.2#逻辑函数(logistic#function)###2.#实现一个简单的神经网络算法importnumpy as npdeftanh(x):returnnp.tanh(x)...

weixin_39767124的博客 420

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。将Apache Ignite集成到Spring Boot应用中,可以显著提高应用的性能和可扩展性。Spring Boot的简单配置和Ignite的强大功能相结合,使得开发和部署更加高效。首先,创建一个新的Spring Boot项目。可以通过Spring Initializr(https://start.spring.io/)

九天的专栏 2143

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,套用简单

L_goodboy的博客 5万+

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

CANFD加速是什么?和CANFD有什么区别?

在使用CAN设备上位机的时候,已经选择了CANFD,但还有一个选项是“CANFD加速”,那CANFD加速和不加速有什么区别呢?刚接触CANFD小伙伴肯定一脸懵,本篇主要是给大家分享一下他们的区别,如果对你有帮助,请转发,收藏,点赞💐🎉👍😊

汽车电子软件领域知识分享 1039

Python实现CNN LeNet5卷积神经网络实例

Python实现CNN LeNet5卷积神经网络实例 去发现同类优质开源项目:https://gitcode.com/ 资源介绍 本资源为您提供了使用Python和Theano实现的LeNet5卷积神经网络实例。LeNet5是一种经典的卷积神经网络架构,广泛应用于图像分类任务。本实例详细介绍了如何构建LeNet5神经网络,并包含了所有必要的超参数设置,以便您能够重现MNIST数据集上的实验结果。 ...

gitblog_06732的博客 426

【100%通过率】华为机试真题 Python 实现【对称美学】【2022.11 Q4 新题】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 1万+

五分钟读懂神经网络算法(含Python实例讲解)

在人工智能(AI)领域,神经网络(Neural Network)是一种能自动从数据中学习规律的算法。它模仿人脑中神经元的连接方式,通过一层层计算,把输入信息(如图片、声音、文本)转化为输出结果(如分类或预测)。简单来说,它的目标就是:“给我数据,我自己总结规律,然后帮你预测。nn.Linear(3, 4), # 输入层3个 → 隐藏层4个神经元nn.ReLU(), # 激活函数ReLUnn.Linear(4, 1), # 隐藏层 → 输出层nn.Sigmoid() # 输出0~1概率🔍。

net core ,前端 ,python 全栈开发 870

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

BP神经网络实例及代码分析(Python+TensorFlow)

BP神经网络实例及代码分析(Python+TensorFlow) 去发现同类优质开源项目:https://gitcode.com/ 资源文件描述 本资源文件包含一个基于Python和TensorFlow实现的BP神经网络实例代码,主要用于对山东某地区历史温度数据进行训练和预测。通过使用前三小时的温度数据,该神经网络能够预测第四小时的温度值。 代码功能 数据集:本项目使用的数据集为2016年4月份...

gitblog_09763的博客 427

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python 全矩阵计算——神经网络实例

神经网络是一种模仿生物神经网络的结构和功能的数学模型或算法模型。

weixin_44021971的博客 1231

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 小程序电商简介
下一篇: 卷积神经网络实例Python(VGG)
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值