函数 API 链接前馈网络和卷积神经网络
Functional API Linking Feed-Forward Networks and Convolutional neural network
现在我有两个网络 f 和 g,第一个在任务 1 上训练,第二个在任务 2 上训练。我将我的数据标记为属于任务 1 或属于任务 2。我如何构建以下 (可训练)自定义架构:
x -> 决定是 1 还是 2 -> 相应地传递给 f 或 g?
我以前从未使用过这样的分支架构...
我试图用下面显示的 Sample Code
来演示您的需求。如果这不是您要找的,请告诉我并提供更多详细信息,我很乐意为您提供帮助。
根据问题,我们正在尝试完成 2 个任务,Task 1 --> Regression
(前馈神经网络)和 Task 2 --> CNN
。我们将根据Label将现有的Dataset组成2个Dataset,是否属于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], .....)
现在我有两个网络 f 和 g,第一个在任务 1 上训练,第二个在任务 2 上训练。我将我的数据标记为属于任务 1 或属于任务 2。我如何构建以下 (可训练)自定义架构:
x -> 决定是 1 还是 2 -> 相应地传递给 f 或 g?
我以前从未使用过这样的分支架构...
我试图用下面显示的 Sample Code
来演示您的需求。如果这不是您要找的,请告诉我并提供更多详细信息,我很乐意为您提供帮助。
根据问题,我们正在尝试完成 2 个任务,Task 1 --> Regression
(前馈神经网络)和 Task 2 --> CNN
。我们将根据Label将现有的Dataset组成2个Dataset,是否属于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], .....)