Функциональный API, связывающий сети прямого распространения и сверточную нейронную сеть - PullRequest
1 голос
/ 29 мая 2020

Прямо сейчас у меня есть две сети f и g, первая обучена задаче 1, а вторая - задаче 2. Я пометил свои данные как принадлежащие задаче 1 или задаче 2. Как я могу построить следующую (обучаемую) собственная архитектура:

x -> решить, 1 или 2 -> перейти к f или g соответственно?

Я никогда раньше не использовал такую ​​разветвленную архитектуру ...

1 Ответ

1 голос
/ 01 июня 2020

Я попытался продемонстрировать, что вам нужно, с помощью Sample Code, показанного ниже. Пожалуйста, дайте мне знать, если это не то, что вы ищете, и дайте более подробную информацию, и я буду рад вам помочь.

Что касается вопроса, мы пытаемся выполнить 2 задачи, Task 1 --> Regression ( Нейронные сети прямого распространения) и Task 2 --> CNN. Мы сформируем 2 набора данных из существующего набора данных на основе метки, независимо от того, принадлежит ли он к Task 1 --> Data_T1 и Task 2 --> Data_T2.

Затем, используя функциональный API, мы можем передать Multiple Inputs и получить Multiple Outputs .

Код показан ниже:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, Dense, Flatten
import pandas as pd

F1 = [1,2,3,4,5,6,7,8,9,10]
F2 = [1,2,3,4,5,6,7,8,9,10]
F3 = [1,2,3,4,5,6,7,8,9,10]
Task = ['t1', 't1', 't2', 't1', 't2', 't2', 't2', 't1', 't1', 't2']

Dict = {'F1': F1, 'F2':F2, 'F3':F3, 'Task':Task} # Column Task tells us whether the Data belongs to Task1 or Task2

Data = pd.DataFrame(Dict) #Create a Dummy Data Frame

Data_T1 = Data[Data['Task']=='t1']
Data_T1 = Data_T1.drop(columns = ['Task'])

Data_T2 = Data[Data['Task']=='t2']
Data_T2 = Data_T2.drop(columns = ['Task'])

Input1 = ...
Input2 = ...

Number_Of_Classes = 3
# Regression Model
D1 = Dense(10, activation = 'relu')(Input1)
Out_Task1 = Dense(1, activation = 'linear') 
# CNN Model
Conv1 = Conv2D(16, (3,3), activation = 'relu')(Input2)
Conv2 = Conv2D(32, (3,3, activation = 'relu'))(Conv1)
Flatten = Flatten()(Conv2)
D2_1 = Dense(10, activation = 'relu')
Out_Task2 = Dense(Number_Of_Classes, activation = 'softmax')

model = Model(inputs = [Input1, Input2], outputs = [Out_Task1, Out_Task2])

model.compile....

model.fit([Data_T1, Data_T2], .....)
...