【发布时间】:2021-03-15 00:45:15
【问题描述】:
我正在使用 Tensorflow 2.3 读取 3 个具有行和列的数据文件来训练模型。这是我的示例代码:
#Input data pipeline
input1 = tf.data.TextLineDataset("Inputs1.raw").skip(1)
input2 = tf.data.TextLineDataset("Inputs2.raw").skip(1)
output = tf.data.TextLineDataset("outcomes.csv").skip(1)
INPUT1=tf.strings.to_number(tf.strings.split(input1, sep='\t'), out_type=tf.dtypes.float32)
INPUT2=tf.strings.to_number(tf.strings.split(input2, sep='\t'), out_type=tf.dtypes.float32)
INPUTS=tf.concat([INPUT1, INPUT2], axis=0)
INPUT_OUTPUT = tf.data.Dataset.zip((INPUTS, output))
dataset=dataset.shuffle(128, reshuffle_each_iteration=False)
dataset=dataset.repeat(3)
dataset = dataset.batch(128).cache()
dataset = dataset.prefetch(1)
iterator = tf.compat.v1.data.make_one_shot_iterator(dataset)
next_element = iterator.get_next()
inputs_features=next_element[0][0]
output=tf.constant(tf.strings.to_number(tf.strings.split(next_element[1], sep=","),out_type=tf.dtypes.float32).numpy()[:,2])
#Model Training
initializer = tensorflow.keras.initializers.GlorotNormal()
inputs = Input(shape=(2555922, ),name="inputs_features")
first_dense = Dense(16,kernel_initializer=initializer, )(inputs)
drop = Dropout(0.2)(first_dense)
out = Dense(1, )(drop)
model = Model(inputs=inputs, outputs=out)
model.compile(loss='mean_squared_error',optimizer=tensorflow.keras.optimizers.Adam(learning_rate=0.00004,beta_1=0.9,beta_2=0.999,epsilon=1e-07,amsgrad=False,name="Adam"), metrics=['mse'])
model.fit(inputs,output,verbose=1,epochs=10000)
我的数据集有 400,000 个样本,批量大小为 128,但是,如您所见,“Epoch x/y ....”下的数字是 4/4:
Epoch 81/10000
4/4 [==============================] - 65s 16s/step - loss: 14.5471 - mse: 14.5471
Epoch 82/10000
4/4 [==============================] - 73s 18s/step - loss: 12.8519 - mse: 12.8519
Epoch 83/10000
4/4 [==============================] - 37s 9s/step - loss: 15.5236 - mse: 15.5236
Epoch 84/10000
4/4 [==============================] - 31s 8s/step - loss: 15.6709 - mse: 15.6709
Epoch 85/10000
你能告诉我为什么我在这里得到 4/4,尽管数据集大小/批量大小远远超过 4?我该如何解决这个问题?我不知道在计算迭代器之后和 model.fit 之前我需要做什么。
【问题讨论】:
-
您在数据集切片上重新初始化了
inputs = Input(shape=(2555922, ),name="inputs")。 -
+ 而不是
tf.compat.v1.data.make_one_shot_iterator使用 tensorflow.org/api_docs/python/tf/data/Iterator -
@krenerd 您能否发布示例代码。在预取之后和 model.fit 之前我不知道我需要做什么。文档也令人困惑
标签: tensorflow keras deep-learning tensorflow2.0 tensorflow-datasets