在没有 Keras 的情况下使用 Tensorflow 2.0 和急切执行
Posted
技术标签:
【中文标题】在没有 Keras 的情况下使用 Tensorflow 2.0 和急切执行【英文标题】:Using Tensorflow 2.0 and eager execution without Keras 【发布时间】:2020-03-14 22:38:07 【问题描述】:所以这个问题可能源于对 tensorflow 缺乏了解。但我正在尝试用tensorflow 2.0
构建一个多层感知器,但没有Keras
。
原因是我的机器学习课程要求我们不使用 keras。为什么你可能会问?我不确定。
我已经用 Keras 轻松地在 tensorflow 2.0
中实现了我们的模型,现在我想在没有 keras
的情况下做同样的事情。
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=784))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(5, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=Adam(),
metrics=['accuracy'])
X_train = X[:7000]
y_train = tf.keras.utils.to_categorical(y[:7000], num_classes=5)
X_dev = X[7000:]
y_dev = tf.keras.utils.to_categorical(y[7000:], num_classes=5)
model.fit(X_train, y_train,
epochs=100,
batch_size=128)
score = model.evaluate(X_dev, y_dev, batch_size=128)
print(score)
这是我的问题。每当我在Tensorflow 2.0
上查找文档时,甚至自定义培训指南都在使用 Keras。
由于占位符和会话在 tensorflow 2.0
中已成为过去,据我了解,所以我有点不确定如何构建它。
我可以制作张量对象。我的印象是我需要使用 Eager Execution 并使用渐变胶带。但我仍然不确定如何将这些东西放在一起。
现在我的问题是。我应该从哪里获得更好的理解?哪个方向下降最大?
如果我在这个堆栈溢出帖子中做错了,请告诉我。这是我第一次来这里。
【问题讨论】:
这是我最接近关于在没有 keras 的情况下制作模型的真实解释。 tensorflow.org/tutorials/customization/… 是制作自定义训练循环的想法还是老师希望您避免层并自己创建权重? 过去曾经有 tensorflow 层(不是 keras 层),也许你可以使用它们加上自定义训练循环。 自定义训练循环:tensorflow.org/tutorials/customization/… 课程讲师是否知道现在 keras 已内置到 tensorflow 中,并且是大多数模型构建中不可或缺的一部分? 【参考方案1】:正如@Daniel Möller 所说,TensorFlow 官方页面上有custom training 和custom layers 的这些教程。如自定义培训页面所述:
本教程使用 tf.Variable 构建和训练一个简单的线性模型。
还有这个blog 可以在没有 Keras API 的情况下创建自定义层和训练。你可以在 Google Colab 上查看这个code,它使用带有自定义层的 Cifar-10,并以相同的方式进行训练。
【讨论】:
第一个链接坏了以上是关于在没有 Keras 的情况下使用 Tensorflow 2.0 和急切执行的主要内容,如果未能解决你的问题,请参考以下文章
Keras - 如何在不改变纵横比的情况下使用 ImageDataGenerator
图像分类任务中,Tensorflow 与 Keras 到底哪个更厉害?
在不使用 Keras API 的情况下,提取 Keras 层的权重对于进行前向传递有啥意义