主頁 >  其他 > 人工智能實踐Tensorflow2.0 第五章--1.卷積神經網路基礎--八股法搭建卷積神經網路--北京大學慕課

人工智能實踐Tensorflow2.0 第五章--1.卷積神經網路基礎--八股法搭建卷積神經網路--北京大學慕課

2022-03-07 07:41:37 其他

第五章–卷積神經網路基礎–八股法搭建卷積神經網路
本講目標:
??介紹神經網路基本概念,用八股法實作卷積神經網路(以cifar10為例,本節建立的框架作為后續網路的baseline,在baseline中修改實作其他網路),參考視頻,

卷積神經網路基礎

  • 0.回顧全連接神經網路
  • 1.卷積計算程序
    • 1.1-卷積概念
    • 1.2-卷積核的表示
    • 1.3-單通道影像卷積計算
    • 1.4-RGB通道影像卷積計算
  • 2.感受野
    • 2.1-感受野(Receptive Field)計算
  • 3.全零填充
    • 3.1-全零填充計算
    • 3.2-全零填充TF描述
  • 4.TF描述卷積層
  • 5.批標準化(Batch Normalization,BN)
  • 6.池化層
  • 7.舍棄層(Dropout)
  • 8.搭建卷積神經網路(CBAPB)
    • 8.1-CBAPB組成
    • 8.2-CBAPB示例
  • 9.八股法搭建完整卷積神經網路
    • 9.1-完整代碼
    • 9.2-輸出結果
  • 10.總結八股創建神經網路
    • 10.1 import
    • 10.2 train,test
    • 10.3搭建神經網路結構----Sequential or class
    • 10.4model.compile
    • 10.5 model.fit
    • 10.6 model.summary

0.回顧全連接神經網路

??每個神經元與前后相鄰層的每一個神經元都有連接關系,輸入是特征,輸出為預測的結果,全連接網路的引數個數為:
在這里插入圖片描述
第一層引數:784x128+128
第二層引數:128x10+10
總共101770個引數

??但在實際應用中,圖片大多數高解析度的多通道圖片,如下圖所示:
在這里插入圖片描述

??如此直接輸入到全連接網路,會使得待優化的引數過多,容易導致模型的過擬合,
??為了解決引數量過大而導致模型過擬合的問題,一般不會將原始影像直接輸入,而是對影像進行特征提取,再將提取到的特征輸入到全連接網路,如下圖所示,是將汽車圖片經過多次特征提取后再送入全連接網路,
在這里插入圖片描述

1.卷積計算程序


1.1-卷積概念

??卷積計算可認為是一種有效提取影像特征的方法,一般會用一個正方形的卷積核,按指定步長,在輸入特征圖上滑動,遍歷輸入特征圖中的每個像素點,
??每一個步長,卷積核會與輸入特征圖出現重合區域,重合區域對應元素相乘、求和再加上偏置項得到輸出特征的一個像素點,詳細計算如下圖所示:
在這里插入圖片描述

??輸入特征圖的深度(channel),決定了當前層卷積核的深度),當前層卷積核的個數,決定了當前層輸出特征圖的深度,


1.2-卷積核的表示

在這里插入圖片描述

左圖是單通道的3x3卷積,共10個引數;
中間是三通道的3x3卷積,共28個引數;
右圖是三通道的5x5卷積,共76個引數,


1.3-單通道影像卷積計算

在這里插入圖片描述


1.4-RGB通道影像卷積計算

在這里插入圖片描述


2.感受野


2.1-感受野(Receptive Field)計算

??感受野是指卷積神經網路個輸出特征圖中的每個像素點,在原始輸入圖片上映射區域的大小,
在這里插入圖片描述

??感受野的相關概念及大小選型可以參考這篇文章,


3.全零填充


3.1-全零填充計算

??為了保持輸出影像尺寸與輸入影像一致,經常會在輸入影像周圍進行全零填充,如下圖所示,在5x5的輸入影像周圍填0,則輸出的尺寸仍為5x5,

在這里插入圖片描述

( (-1 )x0+ 0x2+1x1
+(-1 )x0+0x9+1x5
+(-1 )x0+0x2+1x3
+1=10
??輸出圖片邊長 = 輸入圖片邊長/步長,此圖: 5 / 1 = 5

3.2-全零填充TF描述

在這里插入圖片描述

??tensorflow描述全零填充用引數padding=’SAME’或padding=’VALID’表示,

在這里插入圖片描述

4.TF描述卷積層

tf.keras.layers.Conv2D (
filters = 卷積核個數,
kernel_size = 卷積核尺寸, 
strides =  滑動步長, 
padding = “same” or “valid”, #使用全零填充是“same”,不使用是“valid”(默認)
activation = “ relu ” or “ sigmoid ” or “ tanh ” or “ softmax”等 , # 如有BN 此處不寫
input_shape = (,, 通道數) #輸入特征圖維度,可省略
)

??卷積層的表示如下:
在這里插入圖片描述

5.批標準化(Batch Normalization,BN)

??標準化:使資料符合0均值1為標準差的分布
??批標準化:對一小批資料(batch),做標準化處理
在這里插入圖片描述

6.池化層

?池化用于減少特征數量;
?最大值池化可提取圖片紋理;

tf.keras.layers.MaxPool2D(
pool_size= 池化核尺寸, 
strides= 池化步長,#默認為pool_size
padding=‘valid’or‘same’ #(默認)“valid”
)

?均值池化可保留背景特征;

tf.keras.layers.AveragePooling2D(
pool_size= 池化核尺寸, 
strides= 池化步長,#默認為pool_size
padding=‘valid’or‘same’ # (默認)“valid”)
)

7.舍棄層(Dropout)

??神經網路訓練時,將一部分神經元按照一定概率從神經網路中暫時舍棄,
??神經網路使用時,被舍棄的神經元恢復連接,
在這里插入圖片描述

tf.keras.layers.Dropout(舍棄的概率)
??在 Tensorflow 框架下,利用 tf.keras.layers.Dropout 函式構建 Dropout 層,引數為舍棄的概率(大于 0 小于 1),

在這里插入圖片描述

8.搭建卷積神經網路(CBAPB)

8.1-CBAPB組成

??利用上述知識,就可以構建出基本的卷積神經網路(CNN)了,其核心思路為在 CNN中利用卷積核(kernel)提取特征后,送入全連接網路,
??CNN 模型的主要模塊:一般包括上述的卷積層(Conv2D)、BN 層、激活函式(Activation)、池化層(Pooling)、失活(舍棄)層(Dropout)以及全連接層,
在這里插入圖片描述

??故取特征提取部分的各個模塊的首字母,組成CBPAB,
??牢記以下五個部分組成卷積:

Conv2D、 BatchNormalization、 Activation、 Pooling、 Dropout

在這里插入圖片描述

卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout
卷積就是特征提取器:CBAPB
Conv2D、BatchNormalization、Activation、Pooling、Dropout

8.2-CBAPB示例

?搭建如下網路,記住CBAPB
?卷積就是特征提取器,就是CBAPB,
在這里插入圖片描述

卷積就是特征提取器:CBAPB

Conv2D、 BatchNormalization、 Activation、 Pooling、 Dropout

9.八股法搭建完整卷積神經網路

9.1-完整代碼

#六步法第一步->import匯入需要的包
import  tensorflow as tf
import  os
import  numpy as np
from matplotlib import  pyplot as plt
from tensorflow.keras.layers import Conv2D,BatchNormalization,Activation,MaxPool2D,Dropout,Flatten,Dense
from tensorflow.keras import Model
np.set_printoptions(threshold=np.inf)

#六步法第二步->輸入train,test
cifar10=tf.keras.datasets.cifar10
(x_train,y_train),(x_test,y_test)=cifar10.load_data()
x_train,x_test=x_train/255.,x_test/255.

#六步法第三步->Model搭建網路結構

class Baseline(Model):
    def __init__(self):
        super(Baseline,self).__init__()
        #卷積就是CBAPD
        #C
        self.c1=Conv2D(filters=6,kernel_size=(5,5),padding='same')#卷積層
        #B
        self.b1=BatchNormalization()#BN層
        #A
        self.a1=Activation('relu')#激活層
        #P
        self.p1=MaxPool2D(pool_size=(2,2),strides=2,padding='same')#池化層
        #D
        self.d1=Dropout(0.2)#dropout層

        self.flatten=Flatten()
        self.f1=Dense(128,activation='relu')
        self.d2=Dropout(0.2)
        self.f2=Dense(10,activation='softmax')

    def call(self,x):
        x=self.c1(x)
        x=self.b1(x)
        x=self.a1(x)
        x=self.p1(x)
        x=self.d1(x)

        x=self.flatten(x)
        x=self.f1(x)
        x=self.d2(x)
        y=self.f2(x)
        return  y

model=Baseline()
#六步法第四步->compile配置模型
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

#加載已經有的模型,如果沒有則不加載
checkpoint_save_path='./checkpoint/Baseline.ckpt'
if os.path.exists(checkpoint_save_path+'.index'):
    print('-------load the model-------')
    model.load_weights(checkpoint_save_path)

#撰寫自動保存模型的回呼函式
cp_callback=tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_save_path,
    save_weights_only=True,
    save_best_only=True
)

#六步法第五步->fit訓練模型
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1,
                    callbacks=[cp_callback])
#六步法第五步->summary查看網路模型
model.summary()

# print(model.trainable_variables)
file = open('./weights.txt', 'w')
for v in model.trainable_variables:
    file.write(str(v.name) + '\n')
    file.write(str(v.shape) + '\n')
    file.write(str(v.numpy()) + '\n')
file.close()

###############################################    show   ###############################################
acc = history.history['sparse_categorical_accuracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

plt.subplot(1,2,1)
plt.plot(acc,label='Training Accuracy')
plt.plot(val_acc,label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()

9.2-輸出結果

Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 3s 0us/step
170508288/170498071 [==============================] - 3s 0us/step
Epoch 1/5
1563/1563 [==============================] - 19s 6ms/step - loss: 1.6454 - sparse_categorical_accuracy: 0.4035 - val_loss: 1.4076 - val_sparse_categorical_accuracy: 0.5007
Epoch 2/5
1563/1563 [==============================] - 9s 6ms/step - loss: 1.3999 - sparse_categorical_accuracy: 0.4932 - val_loss: 1.2718 - val_sparse_categorical_accuracy: 0.5448
Epoch 3/5
1563/1563 [==============================] - 9s 6ms/step - loss: 1.3375 - sparse_categorical_accuracy: 0.5205 - val_loss: 1.2459 - val_sparse_categorical_accuracy: 0.5546
Epoch 4/5
1563/1563 [==============================] - 9s 6ms/step - loss: 1.2863 - sparse_categorical_accuracy: 0.5368 - val_loss: 1.3322 - val_sparse_categorical_accuracy: 0.5338
Epoch 5/5
1563/1563 [==============================] - 9s 5ms/step - loss: 1.2570 - sparse_categorical_accuracy: 0.5509 - val_loss: 1.1740 - val_sparse_categorical_accuracy: 0.5871
Model: "baseline"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             multiple                  456       
                                                                 
 batch_normalization (BatchN  multiple                 24        
 ormalization)                                                   
                                                                 
 activation (Activation)     multiple                  0         
                                                                 
 max_pooling2d (MaxPooling2D  multiple                 0         
 )                                                               
                                                                 
 dropout (Dropout)           multiple                  0         
                                                                 
 flatten (Flatten)           multiple                  0         
                                                                 
 dense (Dense)               multiple                  196736    
                                                                 
 dropout_1 (Dropout)         multiple                  0         
                                                                 
 dense_1 (Dense)             multiple                  1290      
                                                                 
=================================================================
Total params: 198,506
Trainable params: 198,494
Non-trainable params: 12
________________________________________________________________

在這里插入圖片描述

10.總結八股創建神經網路

10.1 import

??引入tensorflow、keras、numpy、matplotlib等庫,可以同時引入keras中的layers、models等庫方便呼叫內部的API,

10.2 train,test

??讀取資料集,可以來源于框架本身帶的資料集,如mnist,fashion,鳶尾花資料集等,或者實際應用中需要自己制作資料集,

10.3搭建神經網路結構----Sequential or class

??當網路結構比較簡單時,可以利用keras中的tf.keras.Sequential 來搭建順序網路模型,
但當網路不是簡單的順序模型時(如殘差網路),則需要用class來定義自己的網路結構,

10.4model.compile

??對搭建好的網路進行編譯,需要指定優化器(Adam、sgd、RMSdrop)、損失函式(交叉熵、均方差)以及需要記錄的準確率和損失值(acc/loss)

10.5 model.fit

??指定訓練資料、驗證資料、迭代輪數、批量大小等等,由于神經網路的引數量和計算量一般都比較大,訓練所需的時間也會比較長,所以會在這里加入斷點續訓以及模型引數的保存等等,使得訓練更加方便,同時防止程式意外停止導致資料丟失的情況,

10.6 model.summary

??將神經網路的模型具體資訊列印出來,包括網路結構、網路各層引數等,便于對網路進行瀏覽和檢查,

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

標籤:AI

上一篇:資料分析工具Pandas

下一篇:什么是One-Hot Encoding?

標籤雲
其他(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