如何在子类模型中设置名称?凯拉斯

2024-10-02 10:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法给子类模型的输出指定具体的名称

即使我的输出层被称为layername1, layername2,并且我以dict的名称返回输出,但输出仍然被称为output_1, output_2

模型定义

from tensorflow.keras.layers import *
from tensorflow.keras.models import *
import tensorflow as tf
from tensorflow import math as tm

class TestModel(Model):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.denselayer = Dense(33, activation='relu')
        self.outlayer1 = Dense(1, name='layername1')
        self.outlayer2 = Dense(1, name='layername2')
        
    def call(self, inputs):
        l_ = self.denselayer(inputs)
        out1 = self.outlayer1(l_)
        out2 = self.outlayer2(l_)
        return {'name1': out1, 'name2': out2}
    
m = TestModel()

x = tf.zeros((100,100,))
yhat = m(x)
y1 = tf.ones((100,1,))
y2 = 2*tf.ones((100,1,))

m.compile(optimizer='Adam', 
          #loss = {'layername1': 'mse', 'layername2': 'binary_crossentropy'},
          #loss_weights = {'layername1': 1, 'layername2': 1},
          loss = ['mse','binary_crossentropy']
          )

这项工作:

m.fit(x, [y1, y2])

这不起作用:

dx = tf.data.Dataset.from_tensor_slices(x)
dy = tf.data.Dataset.from_tensor_slices({'name1': y1, 'name2': y2})
xy = tf.data.Dataset.zip((dx, dy)).batch(1)
m.fit(xy)

这项工作:

dy = tf.data.Dataset.from_tensor_slices({'output_1': y1, 'output_2': y2})
xy = tf.data.Dataset.zip((dx, dy)).batch(1)
m.fit(xy)


Tags: fromimportselfoutputdatatftensorflowdataset

热门问题