首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >定义Keras函数

定义Keras函数
EN

Stack Overflow用户
提问于 2018-06-09 01:59:03
回答 1查看 458关注 0票数 0

我最近开始学习深度学习和CNN。我遇到了下面的代码,它定义了一个简单的CNN。

有谁能帮助我理解这些行是如何工作的:

  1. loss = layer_output[:, :, :, 0] -结果是什么?我的问题是,网络还没有经过训练。权重内核尚未计算。那么,它将返回什么样的数据呢!Keras是否代表了第一个内核?
  2. iterate = K.function([input_img], [loss, grads]) --在0网站上没有太多的文档。我所理解的是,iterate是一个函数,它接受一个输入张量,并返回一个张量列表,第一个是loss,第二个是grads。但是,它们是在其他地方定义的!!

使用以下尺寸定义输入图像:

代码语言:javascript
复制
img_data = np.random.uniform(size=(1, 250, 250, 3))  

这里有一个简单的CNN,它有一个卷积层。它使用两个3X3内核。

代码语言:javascript
复制
input = Input(shape=250, 250, 3,), name='input_1')

First_Conv2D = Conv2D(2, kernel_size=(3, 3), padding="same", name='conv2d_1', activation='relu')(input)
flat = Flatten(name='flatten_1')(First_Conv2D)
output = Dense(2, name='dense_1', activation='softmax')(flat)

model = Model(inputs=[input], outputs=[output])

layer_dict = dict([(layer.name, layer) for layer in model.layers[0:]])
layer_output = layer_dict['conv2d_1'].output

input_img = model.input

# Calculate loss and gradient.
loss = layer_output[:, :, :, 0]
grads = K.gradients(loss, input_img)[0]

# Define a Keras function
iterate = K.function([input_img], [loss, grads])

# Call iterate function 
loss_value, grads_value = iterate([img_data])

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 03:37:11

这看起来像是对Keras作为一个API的令人讨厌的剖析。我认为这会导致更多的混乱,而不是对深度学习的介绍。无论如何,回答你的问题:

  1. 所有张量都是象征性的,这意味着在我们运行会话之前,它们不包含任何值。相反,它们定义了一个有向计算图。loss = layer_output[:,:,:,0]是一个切片操作,它获取最后一个维度的第一个元素,返回另一个3维的张量。当您使用实际输入运行会话时,张量将具有这些操作运行的值。这些操作几乎与NumPy ndarray相同,ndarray不是符号的,包含值,你可以得到一个ndarray,它只是将输入粘合到输出,返回一个单一的操作,当给定输入时,它将跟随计算图从输入到定义的输出。在这种情况下,给定一个单输入列表,它将返回一个包含2个输出张量损失和梯度的列表。这些仍然是象征性的,记住,如果你尝试打印一个,你只会得到它是什么,它的形状,数据类型。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766143

复制
相关文章

相似问题

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