我正在使用TensorFlow 1.9.0中的tf.keras
。似乎在构建input_shape
模型时无需在第一层中指定Sequential
的情况下一切正常:
import tensorflow as tf
from tensorflow import keras
import numpy as np
X_train = np.random.randn(1000, 10)
y_train = np.random.randn(1000)
model = keras.models.Sequential([
keras.layers.Dense(32, activation="relu"),
keras.layers.Dense(1),
])
optimizer = tf.train.MomentumOptimizer(0.01, 0.9)
model.compile(loss="mse", optimizer=optimizer)
model.fit(X_train, y_train, epochs=10)
这对我来说很有意义,因为Keras可以轻松地从输入(X_train
)中获得输入形状。我还尝试使用PyPI Keras,它也可以正常工作(使用TensorFlow 1.9.0后端)。
所以我有两个问题:
tf.keras
是否已正式支持该行为?换句话说,如果我不关心其他后端,这样做是否合法(不指定输入形状),或者在将来的版本中会损坏?谢谢!
答案 0 :(得分:2)
我认为指南中的单词选择(强调我的意思)
模型需要知道它应该期望的输入形状。
可能有点不幸,作为指南,不应被视为规范。
Keras可以接受input_shape
部分(None, n)
或完全(None, None)
未知的input_shape
。实际上,需要后者来创建可随输入大小扩展的FCN网络。
因此,您知道您不知道输入形状,因此建议您明确提供这样的部分/完全未定义的<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#000"
android:gravity="center"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:scaleType="fitXY"
android:layout_marginTop="5dp"
android:layout_marginBottom="60dp"
android:src="@drawable/lwt_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:visibility="visible"
android:id="@+id/imageView"
android:layout_centerInParent="true"/></RelativeLayout>
。它使自文档代码声称输入形状是未知的,而不是对该参数是否丢失提出了一些疑问。