我正在按照https://www.tensorflow.org/beta/tutorials/generative/dcgan上的教程进行学习。
我想使用plt.imshow()来查看生成的图像,但不知为何以下代码行对我不起作用,并且我收到了错误提示:
generator = make_generator_model()noise = tf.random.normal([1, 100])generated_image = generator(noise, training=False)#type = tensorflow.python.framework.ops.Tensorplt.imshow(generated_image[0, :, :, 0], cmap='gray')
错误信息如下:
TypeError: Image data cannot be converted to float
我在StackOverflow上查看了几个讨论串,并尝试使用tf.cast来转换张量,但这也没有解决问题。
网站上的模型与我的代码略有不同(仅有细微差异)
def make_generator_model(): model = Sequential() model.add(Dense(9*9*256, use_bias=False, input_shape=(100,)))# model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Reshape((9, 9, 256))) assert model.output_shape == (None, 9, 9, 256) # Note: None is the batch size model.add(Conv2DTranspose(128, (3, 3), strides=(1, 1), padding='same', use_bias=False)) assert model.output_shape == (None, 9, 9, 128)# model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Conv2DTranspose(64, (3,3), strides=(1, 1), padding='same', use_bias=False)) assert model.output_shape == (None, 9, 9, 64)# model.add(BatchNormalization()) model.add(LeakyReLU()) model.add(Conv2DTranspose(1, (3,3), strides=(1, 1), padding='same', use_bias=False, activation='tanh')) assert model.output_shape == (None, 9,9,1) return model
回答:
在TensorFlow 1.xx版本中,你需要评估输出张量。
generator = make_generator_model()noise = tf.random.normal([1, 100])generated_image = generator(noise, training=False)sess = tf.Session() #create session sess.run(tf.global_variables_initializer()) #initialize variablesimage = sess.run(generated_image[0, :, :, 0]) #evaluate image tensor inside sessionplt.imshow(im, cmap='gray')plt.show()
或者你可以使用TensorFlow 2.0 beta版,其中默认使用了即时执行模式。
generator = make_generator_model()noise = tf.random.normal([1, 100])generated_image = generator(noise, training=False)plt.imshow(generated_image[0, :, :, 0], cmap='gray')plt.show()