web-dev-qa-db-fra.com

L'objet tenseur n'a pas d'attribut «inférieur»

Je suis en train de régler un MobileNet avec 14 nouvelles classes. Lorsque j'ajoute de nouveaux calques en:

x=mobile.layers[-6].output
x=Flatten(x)
predictions = Dense(14, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=predictions)

Je reçois l'erreur:

'Tensor' object has no attribute 'lower'

Utilisant également:

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(train_batches, steps_per_Epoch=18,
                validation_data=valid_batches, validation_steps=3, epochs=60, verbose=2)

Je reçois l'erreur:

Error when checking target: expected dense_1 to have 4 dimensions, but got array with shape (10, 14)

Que signifie lower? J'ai vu d'autres scripts de réglage fin et il n'y avait pas d'autres arguments que le nom du modèle qui est X dans ce cas.

6
Shiro Mier

Le tenseur doit être transmis au calque lorsque vous l'appelez, et non comme argument. Par conséquent, cela doit être comme ceci:

x = Flatten()(x)  # first the layer is constructed and then it is called on x

Pour être plus clair, cela équivaut à ceci:

flatten_layer = Flatten()  # instantiate the layer
x = flatten_layer(x)       # call it on the given tensor
12
today