gpt4 book ai didi

python - 将张量从 128,128,3 转换为 129,128,3,稍后填充到该张量的 1,128,3 值发生

转载 作者:行者123 更新时间:2023-12-01 09:16:43 27 4
gpt4 key购买 nike

这是我的 GAN 代码,其中模型正在初始化,一切正常,这里只显示与问题相关的代码:

z = Input(shape=(100+384,))
img = self.generator(z)
print("before: ",img) #128x128x3 shape, dtype=tf.float32
temp = tf.get_variable("temp", [1, 128, 3],dtype=tf.float32)
img=tf.concat(img,temp)
print("after: ",img) #error ValueError: Incompatible type conversion requested to type 'int32' for variable of type 'float32_ref'
valid = self.discriminator(img)
self.combined = Model(z, valid)

我要生成 128x128x3 图像,我想要做的是将 129x128x3 图像提供给鉴别器,并在训练时将 1x128x3 文本嵌入矩阵与图像连接起来。但我必须在开始时指定每个模型(即 GEN 和 DISC)将获得的张量的形状和输入值。 Gen 采用 100noise+384embedding 矩阵并生成 128x128x3 图像,该图像再次通过一些嵌入(即 1x128x3)嵌入并馈送到 DISC。那么我的问题是,这种做法到底正确与否?另外,如果它是正确的或者有意义,那么我如何在开始时指定所需的内容,以便它不会给我带来诸如形状不兼容之类的错误,因为在开始时我必须添加这些行:-

    z = Input(shape=(100+384,))
img = self.generator(z) #128x128x3
valid = self.discriminator(img) #should be 129x128x3
self.combined = Model(z, valid)

但 img 的大小为 128x128x3,后来在训练过程中通过连接嵌入矩阵更改为 129x128x3。那么,如何通过填充或附加另一个张量或简单地 reshape 上述代码中的“img”从 128,128,3 更改为 129,128,3,这当然是不可能的。任何帮助将非常感激。谢谢。

最佳答案

tf.concat 的第一个参数应该是张量列表,而第二个是连接的轴。您可以按如下方式连接 imgtemp 张量:

import tensorflow as tf

img = tf.ones(shape=(128, 128, 3))
temp = tf.get_variable("temp", [1, 128, 3], dtype=tf.float32)
img = tf.concat([img, temp], axis=0)

with tf.Session() as sess:
print(sess.run(tf.shape(img)))
<小时/>

更新:这里有一个最小的示例,说明为什么会收到错误“AttributeError:'Tensor'对象没有属性'_keras_history'”。此错误在以下代码片段中弹出:

from keras.layers import Input, Lambda, Dense
from keras.models import Model
import tensorflow as tf

img = Input(shape=(128, 128, 3)) # Shape=(batch_size, 128, 128, 3)
temp = Input(shape=(1, 128, 3)) # Shape=(batch_size, 1, 128, 3)
concat = tf.concat([img, temp], axis=1)
print(concat.get_shape())
dense = Dense(1)(concat)
model = Model(inputs=[img, temp], outputs=dense)

发生这种情况是因为张量 concat 不是 Keras 张量,因此缺少一些典型的 Keras 张量属性(例如 _keras_history)。为了克服这个问题,您需要将所有 TensorFlow 张量封装到 Keras Lambda layer :

from keras.layers import Input, Lambda, Dense
from keras.models import Model
import tensorflow as tf

img = Input(shape=(128, 128, 3)) # Shape=(batch_size, 128, 128, 3)
temp = Input(shape=(1, 128, 3)) # Shape=(batch_size, 1, 128, 3)
concat = Lambda(lambda x: tf.concat([x[0], x[1]], axis=1))([img, temp])
print(concat.get_shape())
dense = Dense(1)(concat)
model = Model(inputs=[img, temp], outputs=dense)

关于python - 将张量从 128,128,3 转换为 129,128,3,稍后填充到该张量的 1,128,3 值发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51186451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com