我正在重新实现一个text2speech项目。 我在解码器部分遇到属性错误。 网络体系结构来自Deep Voice 3论文。
我正在Google Colab上使用TF 2.0中的keras。 以下是Decoder Keras Model的代码。
y1 = tf.zeros(shape = (16, 203, 320))
def Decoder(name = "decoder"):
din = tf.concat((tf.zeros_like(y1[:, :1, -hp.mel:]), y1[:, :-1, -hp.mel:]), 1)
keys = K.Input(shape = (180, 256), batch_size = 16, name = "keys")
vals = K.Input(shape = (180, 256), batch_size = 16, name = "vals")
prev_max_attentions_li = tf.ones(shape=(hp.dlayer, hp.batch_size), dtype=tf.int32)
for i in range(hp.dlayer):
dpout = K.layers.Dropout(rate = 0 if i == 0 else hp.dropout)(din)
fc_out = K.layers.Dense(hp.char_embed, activation = 'relu')(dpout)
query_pe = K.layers.Embedding(hp.Ty, hp.char_embed)(tf.tile(tf.expand_dims(tf.range(hp.Ty // hp.r), 0), [hp.batch_size, 1]))
key_pe = K.layers.Embedding(hp.Tx, hp.char_embed)(tf.tile(tf.expand_dims(tf.range(hp.Tx), 0), [hp.batch_size, 1]))
return fc_out
alignments_li, max_attentions_li = [], []
for i in range(hp.dlayer):
dpout = K.layers.Dropout(rate = 0)(fc_out)
queries = K.layers.Conv1D(hp.datten_size, hp.dfilter, padding = 'causal', dilation_rate = 2**i)(dpout)
fc_out = (queries + fc_out) * tf.math.sqrt(0.5)
queries = fc_out + query_pe
keys += key_pe
tensor, alignments, max_attentions = Attention(name = "attention")(queries, keys, vals, prev_max_attentions_li[i])
fc_out = (tensor + queries) * tf.math.sqrt(0.5)
alignments_li.append(alignments)
max_attentions_li.append(max_attentions)
decoder_output = fc_out
dpout = K.layers.Dropout(rate = 0)(decoder_output)
mel_logits = K.layers.Dense(hp.mel * hp.r)(dpout)
dpout = K.layers.Dropout(rate = 0)(fc_out)
done_output = K.layers.Dense(2)(dpout)
return K.Model(inputs = [keys, vals], outputs = [mel_logits, done_output, decoder_output, alignments_li, max_attentions_li], name = name)
decoder = Decoder()
keyin = tf.ones(shape = (16, 180, 256))
valin = tf.ones(shape = (16, 180, 256))
#print(decoder((keyin, valin)))
tf.keras.utils.plot_model(decoder, to_file = "decoder.png", show_shapes = True)
当我用一些数据进行测试时,它显示以下错误消息。 我在哪里错了?
--> 129 if not model._is_graph_network:
130 node = pydot.Node(str(id(model)), label=model.name)
131 dot.add_node(node)
AttributeError: 'tensorflow.python.framework.ops.EagerTensor' object has no attribute '_is_graph_network'
答案 0 :(得分:8)
我的情况是,在遇到keras_scratch_graph错误时,tensorflow示例代码在Google colab中工作正常,但在我的机器中无法正常工作。
然后我在开头添加此Python代码,它可以正常工作。
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
# Restrict TensorFlow to only use the fourth GPU
tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
# Currently, memory growth needs to be the same across GPUs
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Memory growth must be set before GPUs have been initialized
print(e)
默认情况下,TensorFlow会映射该进程可见的所有GPU的几乎所有GPU内存(受CUDA_VISIBLE_DEVICES
约束)。
在某些情况下,希望进程仅分配可用内存的子集,或者仅增加进程所需的内存使用量。
例如,您想同时使用一个GPU训练多个小型模型。
通过调用tf.config.experimental.set_memory_growth
,它尝试仅分配运行时分配所需的GPU内存:它开始分配的内存很少,并且随着程序的运行和需要更多的GPU内存,我们扩展了GPU内存分配给TensorFlow流程的区域。
希望有帮助!
答案 1 :(得分:1)
如果您使用Tensorflow-GPU,则添加:
physical_devices = tf.config.experimental.list_physical_devices('GPU')
print("physical_devices-------------", len(physical_devices))
tf.config.experimental.set_memory_growth(physical_devices[0], True)
此外,您可以减小batch_size或更改其他计算机或云服务(例如google colab,亚马逊云)来运行代码,因为我认为这是因为内存的限制。
答案 2 :(得分:1)
在我的情况下,我不得不更新keras和tensorflow
pip install -U tensorflow keras
答案 3 :(得分:0)
我遇到了类似的错误。我减小了批量大小,错误消失了。我不知道为什么,但是对我有用。我猜是与过度堆叠有关的。
答案 4 :(得分:0)
我认为这与gpu有关。看一下回溯:
File "/Users/ydc/dl-npm/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 572, in __call__ return self._call_flat(args)
tf正在呼吁执行,这意味着如果有可用的版本,将使用gpu。在测试密集网络时,我遇到了同样的问题:
inputs=Input(shape=(100,)
)
x=Dense(32, activation='relu')(inputs)
x=Dense(32, activation='relu')(x)
x=Dense(32, activation='relu')(x)
outputs=Dense(10, activation='softmax')(x)
model=Model(inputs=inputs, outputs=outputs)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
t=tf.zeros([1,100])
model.predict(t, steps=1, batch_size=1)
...它给出了类似的回溯,也链接到了渴望执行的地方。 然后,当我使用以下行禁用gpu时:
tf.config.experimental.set_visible_devices([], 'GPU')
...代码运行正常。看看这是否有助于解决问题。 顺便说一句,colab甚至支持gpu吗?我什至都不知道。
答案 5 :(得分:0)
您需要在脚本顶部添加此代码,它在TensorFlow 2.2.0上对我有效
if tf.config.list_physical_devices('GPU'):
physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], enable=True)
tf.config.experimental.set_virtual_device_configuration(physical_devices[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4000)])
答案 6 :(得分:-1)
以下Tensorflow和Keras版本消除了我的问题:
UINavigationController