При использовании модели Keras появляется ошибка «Вы должны указать значение для тензора заполнителя» - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь реализовать модель в Керасе и получил следующую ошибку:

Вы должны указать значение для тензора-заполнителя

Вот моя модель:

def create_base_network(input_shape, out_dims):
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=input_shape))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(out_dims, activation='linear'))

    return model

input_shape=(28,28,3)
anchor_in = Input(shape=input_shape)
pos_in = Input(shape=input_shape)
neg_in = Input(shape=input_shape)

base_network = create_base_network(input_shape, 128)
anchor_out = base_network(anchor_in)
pos_out = base_network(pos_in)
neg_out = base_network(neg_in)

merged = concatenate([anchor_out, pos_out, neg_out], axis=-1)

model = Model(inputs=[anchor_in, pos_in, neg_in], outputs=merged)    

Затем я пытаюсь получить вывод из последовательной модели, используя:

seq_fun = K.function([model.layers[0].input, model.layers[1].input, model.layers[2].input], [model.layers[3].get_output_at(0)])
seq_output = seq_fun([a, p, n])[0]

Входные данные для этого поступают от генератора в виде массива numpy, каждый с необходимой формой Сообщение об ошибке:

InvalidArgumentError: You must feed a value for placeholder tensor 'conv2d_1_input' with dtype float and shape [?,28,28,3]
 [[{{node conv2d_1_input}} = Placeholder[dtype=DT_FLOAT, shape=[?,28,28,3], _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
 [[{{node dense_2/BiasAdd/_175}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_102_dense_2/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Я действительно не знаю, что происходит.

Ответы [ 2 ]

0 голосов
/ 02 августа 2019

переустановите tenorflow == 1.11.0 и keras == 2.1.2 у меня работает.

0 голосов
/ 12 ноября 2018

Созданная вами последовательная модель имеет 4 выходных узла.Один с индексом ноль, то есть get_output_at(0), является результатом его прямой подачи, а остальные три являются его выходами, когда он подается с использованием одного из определенных вами входных слоев.Очевидно, что первый не связан с определенными вами входными слоями, поэтому вы получаете ошибку:

Вы должны указать значение для тензора-заполнителя ...

Поэтому вам нужно указать три других выходных узла (индекс 1, 2 или 3) в качестве вывода вашей пользовательской функции:

seq_fun = K.function([model.layers[0].input, model.layers[1].input, model.layers[2].input], 
                      [model.layers[3].get_output_at(i)])  # i must be 1, 2 or 3

В качестве примечания вы можете определить пользовательскую функцию более кратко, используя inputs атрибут модели:

seq_fun = K.function(model.inputs, [model.layers[3].get_output_at(i)])
...