Может ли слой DenseFeatures иметь определение input_shape? - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь определить input_shape для моей модели. Я знаю, что когда вы определите его для первого слоя, он будет использоваться для остальных слоев. Но когда я пытаюсь дать ему input_shape, он просто возвращает:

ValueError: ('We expected a dictionary here. Instead we got: ', <tf.Tensor 'fl_input:0' shape=(None, 32) dtype=float32>)

Я попытался каким-то образом упаковать его в словарь, но ошибка остается. Как я могу дать моей модели входную форму?

Код:

batch_size = 32
feature_layer = tf.keras.layers.DenseFeatures(feature_columns, name='fl', input_shape=(batch_size,))#, input_shape=(batch_size,))

train_ds = df_to_dataset(train, batch_size=batch_size)
val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

# layers
# no difference between acivation functions and layers
relu = tf.keras.layers.LeakyReLU(alpha=0.1)

# model
model = tf.keras.Sequential()

if len(dataframe.index)<100:
    #model.add(layers.Input(shape=(batch_size,)))
    model.add(feature_layer)
    model.add(layers.Dense(64, activation=relu, name='1'))
    model.add(layers.Dense(64, activation=relu, name='2'))
    model.add(layers.Dense(1, activation='sigmoid'))
elif 100<len(dataframe.index)<1000:
    model.add(feature_layer)
    model.add(layers.Dense(128, activation=relu, name='1'))
    model.add(layers.Dense(128, activation=relu, name='2'))
    model.add(layers.Dense(1, activation='sigmoid'))
elif 1000<len(dataframe.index):
    model.add(feature_layer)
    model.add(layers.Dense(128, activation=relu, name='1'))
    model.add(layers.Dense(128, activation=relu, name='2'))
    model.add(layers.Dense(128, activation=relu, name='3'))
    model.add(layers.Dense(1, activation='sigmoid'))

1 Ответ

0 голосов
/ 30 марта 2020

Во входной форме плотного слоя (т. Е. Feature_layer в этом коде) необходимо указать высоту, ширину и каналы (т. Е. В случае, когда серое изображение упоминается как «1» или для RGB упоминается как «3») вместе с размером пакета .

Порядок формы ввода: Batch_Size, Высота, ширина, Каналы . Если мы не будем указывать размер партии, то модель примет Нет, Высота, ширина, Каналы

batch_size = 32
feature_layer = tf.keras.layers.DenseFeatures(feature_columns, name='fl', input_shape=(batch_size, H, W,C))

train_ds = df_to_dataset(train, batch_size=batch_size)
val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

# layers
# no difference between acivation functions and layers
relu = tf.keras.layers.LeakyReLU(alpha=0.1)

# model
model = tf.keras.Sequential()

if len(dataframe.index)<100:
    #model.add(layers.Input(shape=(batch_size,)))
    model.add(feature_layer)
    model.add(layers.Dense(64, activation=relu, name='1'))
    model.add(layers.Dense(64, activation=relu, name='2'))
    model.add(layers.Dense(1, activation='sigmoid'))
elif 100<len(dataframe.index)<1000:
    model.add(feature_layer)
    model.add(layers.Dense(128, activation=relu, name='1'))
    model.add(layers.Dense(128, activation=relu, name='2'))
    model.add(layers.Dense(1, activation='sigmoid'))
elif 1000<len(dataframe.index):
    model.add(feature_layer)
    model.add(layers.Dense(128, activation=relu, name='1'))
    model.add(layers.Dense(128, activation=relu, name='2'))
    model.add(layers.Dense(128, activation=relu, name='3'))
    model.add(layers.Dense(1, activation='sigmoid'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...