日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keras创建模型

發(fā)布時(shí)間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 keras创建模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于Keras模型


Keras有兩種類型的模型,序貫?zāi)P?#xff08;Sequential)和函數(shù)式模型(Model),函數(shù)式模型應(yīng)用更為廣泛,序貫?zāi)P褪呛瘮?shù)式模型的一種特殊情況。

Sequential models:這種方法用于實(shí)現(xiàn)一些簡單的模型。你只需要向一些存在的模型中添加層就行了。

Functional API:Keras的API是非常強(qiáng)大的,你可以利用這些API來構(gòu)造更加復(fù)雜的模型,比如多輸出模型,有向無環(huán)圖等等。

兩類模型有一些方法是相同的:

model.summary():打印出模型概況model.get_config():返回包含模型配置信息的Python字典。模型也可以從它的config信息中重構(gòu)回去 config = model.get_config() model = Model.from_config(config) # or, for Sequential: model = Sequential.from_config(config) model.get_layer():依據(jù)層名或下標(biāo)獲得層對象model.get_weights():返回模型權(quán)重張量的列表,類型為numpy arraymodel.set_weights():從numpy array里將權(quán)重載入給模型,要求數(shù)組具有與model.get_weights()相同的形狀。model.to_json:返回代表模型的JSON字符串,僅包含網(wǎng)絡(luò)結(jié)構(gòu),不包含權(quán)值。可以從JSON字符串中重構(gòu)原模型: from models import model_from_json json_string = model.to_json() model = model_from_json(json_string) model.to_yaml:與model.to_json類似,同樣可以從產(chǎn)生的YAML字符串中重構(gòu)模型 from models import model_from_yaml yaml_string = model.to_yaml() model = model_from_yaml(yaml_string) model.save_weights(filepath):將模型權(quán)重保存到指定路徑,文件類型是HDF5(后綴是.h5)model.load_weights(filepath, by_name=False):從HDF5文件中加載權(quán)重到當(dāng)前模型中, 默認(rèn)情況下模型的結(jié)構(gòu)將保持不變。如果想將權(quán)重載入不同的模型(有些層相同)中,則設(shè)置by_name=True,只有名字匹配的層才會載入權(quán)重

快速開始序貫(Sequential)模型


序貫?zāi)P褪嵌鄠€(gè)網(wǎng)絡(luò)層的線性堆疊,也就是“一條路走到黑”。
可以通過向Sequential模型傳遞一個(gè)layer的list來構(gòu)造該模型。

from keras.models import Sequential from keras.layers import Dense, Activationmodel = Sequential([ Dense(32, units=784), Activation('relu'), Dense(10), Activation('softmax'), ])

也可以通過.add()方法一個(gè)個(gè)的將layer加入模型中

model = Sequential() model.add(Dense(32, input_shape=(784,)))#layers.Dense 意思是這個(gè)神經(jīng)層是全連接層 model.add(Activation('relu'))

指定輸入數(shù)據(jù)的shape


模型需要知道輸入數(shù)據(jù)的shape,因此,Sequential的第一層需要接受一個(gè)關(guān)于輸入數(shù)據(jù)shape的參數(shù),后面的各個(gè)層則可以自動的推導(dǎo)出中間數(shù)據(jù)的shape,因此不需要為每個(gè)層都指定這個(gè)參數(shù)。有幾種方法來為第一層指定輸入數(shù)據(jù)的shape。

傳遞一個(gè)input_shape的關(guān)鍵字參數(shù)給第一層,input_shape是一個(gè)tuple類型的數(shù)據(jù),其中也可以填入None,如果填入None則表示此位置可能是任何正整數(shù)。數(shù)據(jù)的batch大小不應(yīng)包含在其中。有些2D層,如Dense,支持通過指定其輸入維度input_dim來隱含的指定輸入數(shù)據(jù)shape。一些3D的時(shí)域?qū)又С滞ㄟ^參數(shù)input_dim和input_length來指定輸入shape。如果你需要為輸入指定一個(gè)固定大小的batch_size(常用于stateful RNN網(wǎng)絡(luò)),可以傳遞batch_size參數(shù)到一個(gè)層中,例如你想指定輸入張量的batch大小是32,數(shù)據(jù)shape是(68),則你需要傳遞batch_size=32和input_shape=(6,8) model = Sequential() model.add(Dense(32, input_dim=784))model = Sequential() model.add(Dense(32, input_shape=784))

編譯


在訓(xùn)練模型之前,我們需要通過compile來對學(xué)習(xí)過程進(jìn)行配置。compile接收三個(gè)參數(shù)

優(yōu)化器optimizer:該參數(shù)可指定為已預(yù)定義的優(yōu)化器名,如rmsprop、adagrad,或一個(gè)Optimizer類的對象,詳情見optimizers損失函數(shù)loss:該參數(shù)為模型試圖最小化的目標(biāo)函數(shù),它可為預(yù)定義的損失函數(shù)名,如categorical_crossentropy、mse,也可以為一個(gè)損失函數(shù)。詳情見losses指標(biāo)列表metrics:對分類問題,我們一般將該列表設(shè)置為metrics=['accuracy']。指標(biāo)可以是一個(gè)預(yù)定義指標(biāo)的名字,也可以是一個(gè)用戶定制的函數(shù).指標(biāo)函數(shù)應(yīng)該返回單個(gè)張量,或一個(gè)完成metric_name - > metric_value映射的字典.請參考性能評估 # For a multi-class classification problem model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])# For a binary classification problem model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])# For a mean squared error regression problem model.compile(optimizer='rmsprop',loss='mse')# For custom metrics import keras.backend as Kdef mean_pred(y_true, y_pred):return K.mean(y_pred)model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy', mean_pred]) compile(self, optimizer, loss, metrics=None, sample_weight_mode=None) optimizer:字符串(預(yù)定義優(yōu)化器名)或優(yōu)化器對象,參考優(yōu)化器 loss:字符串(預(yù)定義損失函數(shù)名)或目標(biāo)函數(shù),參考損失函數(shù) metrics:列表,包含評估模型在訓(xùn)練和測試時(shí)的網(wǎng)絡(luò)性能的指標(biāo),典型用法是metrics=['accuracy'] sample_weight_mode:如果你需要按時(shí)間步為樣本賦權(quán)(2D權(quán)矩陣),將該值設(shè)為“temporal”。默認(rèn)為“None”,代表按樣本賦權(quán)(1D權(quán))。在下面fit函數(shù)的解釋中有相關(guān)的參考內(nèi)容。 kwargs:使用TensorFlow作為后端請忽略該參數(shù),若使用Theano作為后端,kwargs的值將會傳遞給 K.function model = Sequential() model.add(Dense(32, input_shape=(500,))) model.add(Dense(10, activation='softmax')) model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

訓(xùn)練


Keras以Numpy數(shù)組作為輸入數(shù)據(jù)和標(biāo)簽的數(shù)據(jù)類型。訓(xùn)練模型一般使用fit函數(shù),該函數(shù)的詳情見這里。下面是一些例子。

# For a single-input model with 2 classes (binary classification):model = Sequential() model.add(Dense(32, activation='relu', input_dim=100)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])# Generate dummy data import numpy as np data = np.random.random((1000, 100)) labels = np.random.randint(2, size=(1000, 1))# Train the model, iterating on the data in batches of 32 samples model.fit(data, labels, epochs=10, batch_size=32) # For a single-input model with 10 classes (categorical classification):model = Sequential() model.add(Dense(32, activation='relu', input_dim=100)) model.add(Dense(10, activation='softmax')) model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])# Generate dummy data import numpy as np data = np.random.random((1000, 100)) labels = np.random.randint(10, size=(1000, 1))# Convert labels to categorical one-hot encoding one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)# Train the model, iterating on the data in batches of 32 samples model.fit(data, one_hot_labels, epochs=10, batch_size=32)

fit

fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

本函數(shù)將模型訓(xùn)練nb_epoch輪,其參數(shù)有:

x:輸入數(shù)據(jù)。如果模型只有一個(gè)輸入,那么x的類型是numpy array,如果模型有多個(gè)輸入,那么x的類型應(yīng)當(dāng)為list,list的元素是對應(yīng)于各個(gè)輸入的numpy arrayy:標(biāo)簽,numpy arraybatch_size:整數(shù),指定進(jìn)行梯度下降時(shí)每個(gè)batch包含的樣本數(shù)。訓(xùn)練時(shí)一個(gè)batch的樣本會被計(jì)算一次梯度下降,使目標(biāo)函數(shù)優(yōu)化一步。epochs:整數(shù),訓(xùn)練的輪數(shù),每個(gè)epoch會把訓(xùn)練集輪一遍。verbose:日志顯示,0為不在標(biāo)準(zhǔn)輸出流輸出日志信息,1為輸出進(jìn)度條記錄,2為每個(gè)epoch輸出一行記錄callbacks:list,其中的元素是keras.callbacks.Callback的對象。這個(gè)list中的回調(diào)函數(shù)將會在訓(xùn)練過程中的適當(dāng)時(shí)機(jī)被調(diào)用,參考回調(diào)函數(shù)validation_split:0~1之間的浮點(diǎn)數(shù),用來指定訓(xùn)練集的一定比例數(shù)據(jù)作為驗(yàn)證集。驗(yàn)證集將不參與訓(xùn)練,并在每個(gè)epoch結(jié)束后測試的模型的指標(biāo),如損失函數(shù)、精確度等。注意,validation_split的劃分在shuffle之前,因此如果你的數(shù)據(jù)本身是有序的,需要先手工打亂再指定validation_split,否則可能會出現(xiàn)驗(yàn)證集樣本不均勻。validation_data:形式為(X,y)的tuple,是指定的驗(yàn)證集。此參數(shù)將覆蓋validation_spilt。shuffle:布爾值或字符串,一般為布爾值,表示是否在訓(xùn)練過程中隨機(jī)打亂輸入樣本的順序。若為字符串“batch”,則是用來處理HDF5數(shù)據(jù)的特殊情況,它將在batch內(nèi)部將數(shù)據(jù)打亂。class_weight:字典,將不同的類別映射為不同的權(quán)值,該參數(shù)用來在訓(xùn)練過程中調(diào)整損失函數(shù)(只能用于訓(xùn)練)sample_weight:權(quán)值的numpy array,用于在訓(xùn)練時(shí)調(diào)整損失函數(shù)(僅用于訓(xùn)練)。可以傳遞一個(gè)1D的與樣本等長的向量用于對樣本進(jìn)行1對1的加權(quán),或者在面對時(shí)序數(shù)據(jù)時(shí),傳遞一個(gè)的形式為(samples,sequence_length)的矩陣來為每個(gè)時(shí)間步上的樣本賦不同的權(quán)。這種情況下請確定在編譯模型時(shí)添加了sample_weight_mode='temporal'。initial_epoch: 從該參數(shù)指定的epoch開始訓(xùn)練,在繼續(xù)之前的訓(xùn)練時(shí)有用。

fit函數(shù)返回一個(gè)History的對象,其History.history屬性記錄了損失函數(shù)和其他指標(biāo)的數(shù)值隨epoch變化的情況,如果有驗(yàn)證集的話,也包含了驗(yàn)證集的這些指標(biāo)變化情況

evaluate

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

本函數(shù)按batch計(jì)算在某些輸入數(shù)據(jù)上模型的誤差,其參數(shù)有:

x:輸入數(shù)據(jù),與fit一樣,是numpy array或numpy array的list y:標(biāo)簽,numpy array batch_size:整數(shù),含義同fit的同名參數(shù) verbose:含義同fit的同名參數(shù),但只能取0或1 sample_weight:numpy array,含義同fit的同名參數(shù)

predict

predict(self, x, batch_size=32, verbose=0)

Keras Sequential models


導(dǎo)入和構(gòu)建序列模型。

from keras.models import Sequential models = Sequential()

接下來我們可以向模型中添加 Dense(full connected layer),Activation,Conv2D,MaxPooling2D函數(shù)。

from keras.layers import Dense, Activation, Conv2D, MaxPooling2D, Flatten, Dropoutmodel.add(Conv2D(64, (3,3), activation='relu', input_shape = (100,100,32))) # This ads a Convolutional layer with 64 filters of size 3 * 3 to the graph

以下是如何將一些最流行的圖層添加到網(wǎng)絡(luò)中。我已經(jīng)在卷積神經(jīng)網(wǎng)絡(luò)教程中寫了很多關(guān)于圖層的描述。

#卷積層

這里我們使用一個(gè)卷積層,64個(gè)卷積核,維度是33的,之后采用 relu 激活函數(shù)進(jìn)行激活,輸入數(shù)據(jù)的維度是 100100*32。注意,如果是第一個(gè)卷積層,那么必須加上輸入數(shù)據(jù)的維度,后面幾個(gè)這個(gè)參數(shù)可以省略。

model.add(Conv2D(64, (3,3), activation='relu', input_shape = (100,100,32)))

#MaxPooling 層

指定圖層的類型,并且指定赤的大小,然后自動完成赤化操作,酷斃了!

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

全連接層

這個(gè)層在 Keras 中稱為被稱之為 Dense 層,我們只需要設(shè)置輸出層的維度,然后Keras就會幫助我們自動完成了。

model.add(Dense(256, activation='relu'))

#Dropout

model.add(Dropout(0.5))

#扁平層

model.add(Flatten())

數(shù)據(jù)輸入

網(wǎng)絡(luò)的第一層需要讀入訓(xùn)練數(shù)據(jù)。因此我們需要去制定輸入數(shù)據(jù)的維度。因此,input_shape參數(shù)被用于制定輸入數(shù)據(jù)的維度大小。

model.add(Conv2D(32, (3,3), activation='relu', input_shape=(224, 224, 3)))

在這個(gè)例子中,數(shù)據(jù)輸入的第一層是一個(gè)卷積層,輸入數(shù)據(jù)的大小是 224*224*3 。

以上操作就幫助你利用序列模型構(gòu)建了一個(gè)模型。接下來,讓我們學(xué)習(xí)最重要的一個(gè)部分。一旦你指定了一個(gè)網(wǎng)絡(luò)架構(gòu),你還需要指定優(yōu)化器和損失函數(shù)。我們在Keras中使用compile函數(shù)來達(dá)到這個(gè)功能。比如,在下面的代碼中,我們使用 rmsprop 來作為優(yōu)化器,binary_crossentropy 來作為損失函數(shù)值。

model.compile(loss='binary_crossentropy', optimizer='rmsprop')

如果你想要使用隨機(jī)梯度下降,那么你需要選擇合適的初始值和超參數(shù):

from keras.optimizers import SGD sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd)

現(xiàn)在,我們已經(jīng)構(gòu)建完了模型。接下來,讓我們向模型中輸入數(shù)據(jù),在Keras中是通過 fit函數(shù)來實(shí)現(xiàn)的。你也可以在該函數(shù)中指定 batch_size 和 epochs 來訓(xùn)練。

model.fit(x_train, y_train, batch_size = 32, epochs = 10, validation_data(x_val, y_val))

最后,我們使用 evaluate 函數(shù)來測試模型的性能。

score = model.evaluate(x_test, y_test, batch_size = 32)

函數(shù)式模型接口


Keras的函數(shù)式模型為Model,即廣義的擁有輸入和輸出的模型,我們使用Model來初始化一個(gè)函數(shù)式模型

from keras.models import Model from keras.layers import Input, Densea = Input(shape=(32,)) b = Dense(32)(a) model = Model(inputs=a, outputs=b)

在這里,我們的模型以a為輸入,以b為輸出,同樣我們可以構(gòu)造擁有多輸入和多輸出的模型

model = Model(inputs=[a1, a2], outputs=[b1, b3, b3])

常用Model屬性

model.layers:組成模型圖的各個(gè)層 model.inputs:模型的輸入張量列表 model.outputs:模型的輸出張量列表

Model模型方法

compile

compile(self, optimizer, loss, metrics=None, loss_weights=None, sample_weight_mode=None)

本函數(shù)編譯模型以供訓(xùn)練,參數(shù)有

optimizer:優(yōu)化器,為預(yù)定義優(yōu)化器名或優(yōu)化器對象,參考優(yōu)化器
loss:損失函數(shù),為預(yù)定義損失函數(shù)名或一個(gè)目標(biāo)函數(shù),參考損失函數(shù)
metrics:列表,包含評估模型在訓(xùn)練和測試時(shí)的性能的指標(biāo),典型用法是metrics=[‘a(chǎn)ccuracy’]如果要在多輸出模型中為不同的輸出指定不同的指標(biāo),可像該參數(shù)傳遞一個(gè)字典,例如metrics={‘ouput_a’: ‘a(chǎn)ccuracy’}
sample_weight_mode:如果你需要按時(shí)間步為樣本賦權(quán)(2D權(quán)矩陣),將該值設(shè)為“temporal”。默認(rèn)為“None”,代表按樣本賦權(quán)(1D權(quán))。如果模型有多個(gè)輸出,可以向該參數(shù)傳入指定sample_weight_mode的字典或列表。在下面fit函數(shù)的解釋中有相關(guān)的參考內(nèi)容。
kwargs:使用TensorFlow作為后端請忽略該參數(shù),若使用Theano作為后端,kwargs的值將會傳遞給 K.function

【Tips】如果你只是載入模型并利用其predict,可以不用進(jìn)行compile。在Keras中,compile主要完成損失函數(shù)和優(yōu)化器的一些配置,是為訓(xùn)練服務(wù)的。predict會在內(nèi)部進(jìn)行符號函數(shù)的編譯工作(通過調(diào)用_make_predict_function生成函數(shù))

fit(self, x=None, y=None, batch_size=32, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

使用Keras API開發(fā)VGG卷積神經(jīng)網(wǎng)絡(luò)


VGG:VGG卷積神經(jīng)網(wǎng)絡(luò)是牛津大學(xué)在2014年提出來的模型。當(dāng)這個(gè)模型被提出時(shí),由于它的簡潔性和實(shí)用性,馬上成為了當(dāng)時(shí)最流行的卷積神經(jīng)網(wǎng)絡(luò)模型。它在圖像分類和目標(biāo)檢測任務(wù)中都表現(xiàn)出非常好的結(jié)果。在2014年的ILSVRC比賽中,VGG 在Top-5中取得了92.3%的正確率。 該模型有一些變種,其中最受歡迎的當(dāng)然是 vgg-16,這是一個(gè)擁有16層的模型。你可以看到它需要維度是 224*224*3 的輸入數(shù)據(jù)。

讓我們來寫一個(gè)獨(dú)立的函數(shù)來完整實(shí)現(xiàn)這個(gè)模型。

img_input = Input(shape=input_shape)# Block 1x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(img_input)x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x)# Block 2x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x)x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x)# Block 3x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x)x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x)# Block 4x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x)# Block 5x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x)x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x)x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x)x = Flatten(name='flatten')(x)x = Dense(4096, activation='relu', name='fc1')(x)x = Dense(4096, activation='relu', name='fc2')(x)x = Dense(classes, activation='softmax', name='predictions')(x)

我們可以將這個(gè)完整的模型,命名為 vgg16.py。

在這個(gè)例子中,我們來運(yùn)行 imageNet 數(shù)據(jù)集中的某一些數(shù)據(jù)來進(jìn)行測試。具體代碼如下

model = applications.VGG16(weights='imagenet')img = image.load_img('cat.jpeg', target_size=(224, 224))x = image.img_to_array(img)x = np.expand_dims(x, axis=0)x = preprocess_input(x)preds = model.predict(x)for results in decode_predictions(preds):for result in results:print('Probability %0.2f%% => [%s]' % (100*result[2], result[1]))


建模示例


DEBUG = False # 建模 if DEBUG:model = Sequential()model.add(Convolution2D(32, 5, 5, border_mode='valid', input_shape=(60, 200, 1), name='conv1'))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Convolution2D(32, 3, 3, name='conv2'))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Flatten())# model.add(Reshape((20, 60)))# model.add(LSTM(32))model.add(Dense(512))model.add(Activation('relu'))model.add(Dense(216))model.add(Activation('softmax'))else:model = model_from_json(open('model/ba_cnn_model2.json').read())model.load_weights('model/ba_cnn_model2.h5')# 編譯 model.compile(loss='mse', optimizer='adam', metrics=['accuracy'], class_mode='categorical') model.summary()# 繪圖 plot(model, to_file='model.png', show_shapes=True)# 訓(xùn)練 check_pointer = ModelCheckpoint('./model/train_len_size1.h5', monitor='val_loss', verbose=1, save_best_only=True) model.fit(x_train, y_train, batch_size=32, nb_epoch=5, validation_split=0.1, callbacks=[check_pointer])json_string = model.to_json() with open('./model/ba_cnn_model2.json', 'w') as fw:fw.write(json_string) model.save_weights('./model/ba_cnn_model2.h5')# 測試 y_pred = model.predict(x_test, verbose=1) cnt = 0 for i in range(len(y_pred)):guess = ctable.decode(y_pred[i])correct = ctable.decode(y_test[i])if guess == correct:cnt += 1if i%10==0:print '--'*10, iprint 'y_pred', guessprint 'y_test', correct print cnt/float(len(y_pred))

參考文獻(xiàn)


Keras TensorFlow教程:如何從零開發(fā)一個(gè)復(fù)雜深度學(xué)習(xí)模型

keras中文文檔
快速開始序貫(Sequential)模型
Sequential模型接口
函數(shù)式模型接口

keras可視化pydot graphviz問題

總結(jié)

以上是生活随笔為你收集整理的keras创建模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。