bp算法代碼python復現的簡單介紹

本文目錄一覽:

python 利用pybrain庫實現的BP神經網絡 算法 不會畫收斂圖 求助

這個神經網絡只能處理分兩類的的情況,這是由這個神經網絡的結構決定了的。 如果想應付分多類的情況,必須對輸出層作softmax處理。

怎樣用python構建一個卷積神經網絡

用keras框架較為方便

首先安裝anaconda,然後通過pip安裝keras

以下轉自wphh的博客。

#coding:utf-8

”’

    GPU run command:

        THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python cnn.py

    CPU run command:

        python cnn.py

2016.06.06更新:

這份代碼是keras開發初期寫的,當時keras還沒有現在這麼流行,文檔也還沒那麼豐富,所以我當時寫了一些簡單的教程。

現在keras的API也發生了一些的變化,建議及推薦直接上keras.io看更加詳細的教程。

”’

#導入各種用到的模塊組件

from __future__ import absolute_import

from __future__ import print_function

from keras.preprocessing.image import ImageDataGenerator

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation, Flatten

from keras.layers.advanced_activations import PReLU

from keras.layers.convolutional import Convolution2D, MaxPooling2D

from keras.optimizers import SGD, Adadelta, Adagrad

from keras.utils import np_utils, generic_utils

from six.moves import range

from data import load_data

import random

import numpy as np

np.random.seed(1024)  # for reproducibility

#加載數據

data, label = load_data()

#打亂數據

index = [i for i in range(len(data))]

random.shuffle(index)

data = data[index]

label = label[index]

print(data.shape[0], ‘ samples’)

#label為0~9共10個類別,keras要求格式為binary class matrices,轉化一下,直接調用keras提供的這個函數

label = np_utils.to_categorical(label, 10)

###############

#開始建立CNN模型

###############

#生成一個model

model = Sequential()

#第一個卷積層,4個卷積核,每個卷積核大小5*5。1表示輸入的圖片的通道,灰度圖為1通道。

#border_mode可以是valid或者full,具體看這裡說明:

#激活函數用tanh

#你還可以在model.add(Activation(‘tanh’))後加上dropout的技巧: model.add(Dropout(0.5))

model.add(Convolution2D(4, 5, 5, border_mode=’valid’,input_shape=(1,28,28))) 

model.add(Activation(‘tanh’))

#第二個卷積層,8個卷積核,每個卷積核大小3*3。4表示輸入的特徵圖個數,等於上一層的卷積核個數

#激活函數用tanh

#採用maxpooling,poolsize為(2,2)

model.add(Convolution2D(8, 3, 3, border_mode=’valid’))

model.add(Activation(‘tanh’))

model.add(MaxPooling2D(pool_size=(2, 2)))

#第三個卷積層,16個卷積核,每個卷積核大小3*3

#激活函數用tanh

#採用maxpooling,poolsize為(2,2)

model.add(Convolution2D(16, 3, 3, border_mode=’valid’)) 

model.add(Activation(‘relu’))

model.add(MaxPooling2D(pool_size=(2, 2)))

#全連接層,先將前一層輸出的二維特徵圖flatten為一維的。

#Dense就是隱藏層。16就是上一層輸出的特徵圖個數。4是根據每個卷積層計算出來的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4

#全連接有128個神經元節點,初始化方式為normal

model.add(Flatten())

model.add(Dense(128, init=’normal’))

model.add(Activation(‘tanh’))

#Softmax分類,輸出是10類別

model.add(Dense(10, init=’normal’))

model.add(Activation(‘softmax’))

#############

#開始訓練模型

##############

#使用SGD + momentum

#model.compile里的參數loss就是損失函數(目標函數)

sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)

model.compile(loss=’categorical_crossentropy’, optimizer=sgd,metrics=[“accuracy”])

#調用fit方法,就是一個訓練過程. 訓練的epoch數設為10,batch_size為100.

#數據經過隨機打亂shuffle=True。verbose=1,訓練過程中輸出的信息,0、1、2三種方式都可以,無關緊要。show_accuracy=True,訓練時每一個epoch都輸出accuracy。

#validation_split=0.2,將20%的數據作為驗證集。

model.fit(data, label, batch_size=100, nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)

“””

#使用data augmentation的方法

#一些參數和調用的方法,請看文檔

datagen = ImageDataGenerator(

        featurewise_center=True, # set input mean to 0 over the dataset

        samplewise_center=False, # set each sample mean to 0

        featurewise_std_normalization=True, # divide inputs by std of the dataset

        samplewise_std_normalization=False, # divide each input by its std

        zca_whitening=False, # apply ZCA whitening

        rotation_range=20, # randomly rotate images in the range (degrees, 0 to 180)

        width_shift_range=0.2, # randomly shift images horizontally (fraction of total width)

        height_shift_range=0.2, # randomly shift images vertically (fraction of total height)

        horizontal_flip=True, # randomly flip images

        vertical_flip=False) # randomly flip images

# compute quantities required for featurewise normalization 

# (std, mean, and principal components if ZCA whitening is applied)

datagen.fit(data)

for e in range(nb_epoch):

    print(‘-‘*40)

    print(‘Epoch’, e)

    print(‘-‘*40)

    print(“Training…”)

    # batch train with realtime data augmentation

    progbar = generic_utils.Progbar(data.shape[0])

    for X_batch, Y_batch in datagen.flow(data, label):

        loss,accuracy = model.train(X_batch, Y_batch,accuracy=True)

        progbar.add(X_batch.shape[0], values=[(“train loss”, loss),(“accuracy:”, accuracy)] )

“””

有沒有用python實現的遺傳算法優化BP神經網絡的代碼

下面是函數實現的代碼部分:

clc

clear all

close all

%% 加載神經網絡的訓練樣本 測試樣本每列一個樣本 輸入P 輸出T,T是標籤

%樣本數據就是前面問題描述中列出的數據

%epochs是計算時根據輸出誤差返回調整神經元權值和閥值的次數

load data

% 初始隱層神經元個數

hiddennum=31;

% 輸入向量的最大值和最小值

threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];

inputnum=size(P,1); % 輸入層神經元個數

outputnum=size(T,1); % 輸出層神經元個數

w1num=inputnum*hiddennum; % 輸入層到隱層的權值個數

w2num=outputnum*hiddennum;% 隱層到輸出層的權值個數

N=w1num+hiddennum+w2num+outputnum; %待優化的變量的個數

%% 定義遺傳算法參數

NIND=40; %個體數目

MAXGEN=50; %最大遺傳代數

PRECI=10; %變量的二進制位數

GGAP=0.95; %代溝

px=0.7; %交叉概率

pm=0.01; %變異概率

trace=zeros(N+1,MAXGEN); %尋優結果的初始值

FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)]; %區域描述器

Chrom=crtbp(NIND,PRECI*N); %初始種群

%% 優化

gen=0; %代計數器

X=bs2rv(Chrom,FieldD); %計算初始種群的十進制轉換

ObjV=Objfun(X,P,T,hiddennum,P_test,T_test); %計算目標函數值

while gen

BP神經網絡——Python簡單實現三層神經網絡(Numpy)

我們將在Python中創建一個NeuralNetwork類,以訓練神經元以給出準確的預測。該課程還將具有其他幫助程序功能。

1. 應用Sigmoid函數

我們將使用 Sigmoid函數 (它繪製一條“ S”形曲線)作為神經網絡的激活函數。

2. 訓練模型

這是我們將教神經網絡做出準確預測的階段。每個輸入將具有權重(正或負)。

這意味着具有大量正權重或大量負權重的輸入將對結果輸出產生更大的影響。

我們最初是將每個權重分配給一個隨機數。

本文參考翻譯於此網站 —— 原文

原創文章,作者:ISNY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137226.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ISNY的頭像ISNY
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29

發表回復

登錄後才能評論