首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:类型为'Conv2DTranspose‘的对象没有len()

TypeError:类型为'Conv2DTranspose‘的对象没有len()
EN

Stack Overflow用户
提问于 2019-07-31 18:56:59
回答 2查看 3.5K关注 0票数 1

我正在使用Keras编写一个自动编码器,我一直得到以下错误。我认为这与添加arg keras_initializer有关,因为我之前得到了Conv2D的错误,添加了初始化器和Conv2D有长度。虽然,由于我使用的是tf.keras.layers.reshape,所以这不是一个有效的参数。

以下是整个错误跟踪。

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-c8370b57aa14> in <module>()
     57 
     58 
---> 59 autoencoder = keras.Model(inputs = encoder_input, outputs = decoder_output, name='autoencoder')
     60 autoencoder.summary()
     61 

4 frames
/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name + '` call to the ' +
     90                               'Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in __init__(self, *args, **kwargs)
     91                 'inputs' in kwargs and 'outputs' in kwargs):
     92             # Graph network
---> 93             self._init_graph_network(*args, **kwargs)
     94         else:
     95             # Subclassed network

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _init_graph_network(self, inputs, outputs, name)
    229         # Keep track of the network's nodes and layers.
    230         nodes, nodes_by_depth, layers, layers_by_depth = _map_graph_network(
--> 231             self.inputs, self.outputs)
    232         self._network_nodes = nodes
    233         self._nodes_by_depth = nodes_by_depth

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in _map_graph_network(inputs, outputs)
   1364                   layer=layer,
   1365                   node_index=node_index,
-> 1366                   tensor_index=tensor_index)
   1367 
   1368     for node in reversed(nodes_in_decreasing_depth):

/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
   1345 
   1346         # Propagate to all previous tensors connected to this node.
-> 1347         for i in range(len(node.inbound_layers)):
   1348             x = node.input_tensors[i]
   1349             layer = node.inbound_layers[i]

TypeError: object of type 'Conv2DTranspose' has no len()

这是我的密码:

代码语言:javascript
复制
import tensorflow as tf
import keras
import numpy as np 
import tensorflow.keras
from tensorflow.keras import layers
from tensorflow.keras.datasets import cifar10
from keras.layers import Input, Conv2DTranspose
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
num_classes = 10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
num_classes = 10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
#plt.imshow(x_train[1])

encoder_input = tf.keras.layers.Input(shape=(32, 32, 3), name="input")
x = tf.keras.layers.Conv2D(16, 3,activation = 'relu', kernel_initializer = keras.initializers.RandomUniform)(encoder_input)
x = tf.keras.layers.Conv2D(32, 3, activation = 'relu')(x)
x = tf.keras.layers.MaxPooling2D(3)(x)
x = tf.keras.layers.Conv2D(32, 3,activation = 'relu')(x)
x = tf.keras.layers.Conv2D(16, 3, activation = 'relu')(x)
encoder_output = tf.keras.layers.GlobalMaxPooling2D()(x)

encoder = tf.keras.Model(inputs=encoder_input, outputs=encoder_output, name = 'encoder')
encoder.summary()

#Decoder
decoder_input = tf.keras.layers.Reshape((4, 4, 1))(encoder_output)
x = tf.keras.layers.Conv2DTranspose(16, 3, activation = 'relu')(decoder_input)
x = tf.keras.layers.Conv2DTranspose(32, 3, activation = 'relu')(x)
x = tf.keras.layers.UpSampling2D(3)(x)
x = tf.keras.layers.Conv2DTranspose(16, 3, activation = 'relu')(x)
decoder_output = tf.keras.layers.Conv2DTranspose(1, 3, activation = 'relu')(x)


autoencoder = keras.Model(inputs = encoder_input, outputs = decoder_output, name='autoencoder')
autoencoder.summary()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-31 20:19:24

您正在混合tf.keraskeras导入,--这是不支持的--而且它将无法工作。您需要选择一个实现并从其中导入所有模块/类。

票数 9
EN

Stack Overflow用户

发布于 2019-07-31 20:20:22

对上述情况使用from tensorflow import keras

更新代码:

代码语言:javascript
复制
import tensorflow as tf
from tensorflow import keras

num_classes = 10
(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')


encoder_input = tf.keras.layers.Input(shape=(32, 32, 3), name="input")
x = tf.keras.layers.Conv2D(16, 3,activation = 'relu', kernel_initializer = keras.initializers.RandomUniform)(encoder_input)
x = tf.keras.layers.Conv2D(32, 3, activation = 'relu')(x)
x = tf.keras.layers.MaxPooling2D(3)(x)
x = tf.keras.layers.Conv2D(32, 3,activation = 'relu')(x)
x = tf.keras.layers.Conv2D(16, 3, activation = 'relu')(x)
encoder_output = tf.keras.layers.GlobalMaxPooling2D()(x)

encoder = tf.keras.Model(inputs=encoder_input, outputs=encoder_output, name = 'encoder')
encoder.summary()

#Decoder
decoder_input = tf.keras.layers.Reshape((4, 4, 1))(encoder_output)
x = tf.keras.layers.Conv2DTranspose(16, 3, activation = 'relu')(decoder_input)
x = tf.keras.layers.Conv2DTranspose(32, 3, activation = 'relu')(x)
x = tf.keras.layers.UpSampling2D(3)(x)
x = tf.keras.layers.Conv2DTranspose(16, 3, activation = 'relu')(x)
decoder_output = tf.keras.layers.Conv2DTranspose(1, 3, activation = 'relu')(x)


autoencoder = keras.Model(inputs = encoder_input, outputs = decoder_output, name='autoencoder')
autoencoder.summary()

产出:

代码语言:javascript
复制
x_train shape: (60000, 32, 32, 3)
60000 train samples
10000 test samples
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input (InputLayer)           (None, 32, 32, 3)         0         
_________________________________________________________________
conv2d_35 (Conv2D)           (None, 30, 30, 16)        448       
_________________________________________________________________
conv2d_36 (Conv2D)           (None, 28, 28, 32)        4640      
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 9, 9, 32)          0         
_________________________________________________________________
conv2d_37 (Conv2D)           (None, 7, 7, 32)          9248      
_________________________________________________________________
conv2d_38 (Conv2D)           (None, 5, 5, 16)          4624      
_________________________________________________________________
global_max_pooling2d_8 (Glob (None, 16)                0         
=================================================================
Total params: 18,960
Trainable params: 18,960
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input (InputLayer)           (None, 32, 32, 3)         0         
_________________________________________________________________
conv2d_35 (Conv2D)           (None, 30, 30, 16)        448       
_________________________________________________________________
conv2d_36 (Conv2D)           (None, 28, 28, 32)        4640      
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 9, 9, 32)          0         
_________________________________________________________________
conv2d_37 (Conv2D)           (None, 7, 7, 32)          9248      
_________________________________________________________________
conv2d_38 (Conv2D)           (None, 5, 5, 16)          4624      
_________________________________________________________________
global_max_pooling2d_8 (Glob (None, 16)                0         
_________________________________________________________________
reshape_6 (Reshape)          (None, 4, 4, 1)           0         
_________________________________________________________________
conv2d_transpose_16 (Conv2DT (None, 6, 6, 16)          160       
_________________________________________________________________
conv2d_transpose_17 (Conv2DT (None, 8, 8, 32)          4640      
_________________________________________________________________
up_sampling2d_4 (UpSampling2 (None, 24, 24, 32)        0         
_________________________________________________________________
conv2d_transpose_18 (Conv2DT (None, 26, 26, 16)        4624      
_________________________________________________________________
conv2d_transpose_19 (Conv2DT (None, 28, 28, 1)         145       
=================================================================
Total params: 28,529
Trainable params: 28,529
Non-trainable params: 0
_________________________________________________________________
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57297296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档