TF2.0:tf.py_function返回“不受支持的对象”以在推理期间进行聚合如何固定类型?

问题描述

[使用TF 2.0,python 3]

曾经被称为的问题:“如何在TF模型的图形中调用tf.py_function来使用python的日期时间进行特征提取?”

我通过弄乱来弄清楚。见下文。但是当我尝试运行model.predict()

时,我遇到了底部出现的错误
  @Test
    fun test() = testCoroutineRule.runBlockingTest {

        val myTestData = mutablelivedata<Int>()
        myTestData.value = 1
        myTestData.value = 2
        myTestData.value = 3

        myTestData.test().values {

            this.forEach {
                println("? Test numbers: $it")
            }
        }

    }

这行得通!您可以看出来,因为它打印出了正确的日期和星期值作为示例。 但是我在运行model.predict时仍然出现错误

import numpy as np
import pandas as pd
import datetime as dt
import tensorflow as tf
from tensorflow.keras.layers import Dense,Lambda,Input
from tensorflow.keras import Model
from tensorflow.keras.optimizers import Adagrad


x_1 = np.array([['Dec 15,2020 @ 17:00:00.000'],['Oct 15,2019 @ 18:00:00.000'],['May 12,2017 @ 12:04:00.000'],['Mar 21,2018 @ 19:00:00.000'],['Jan 5,2018 @ 19:00:00.000']])
x_2 = np.array([[1.0],[2.0],[3.0],[4.0],[5.0]])

inputs = [x_1,x_2]

def week(date_):

    date_ = date_.numpy()[0]  # needed for eager mode to get a tf.map_fn or tf.py_function to work properly on batches of datetime string inputs
    
    if type(date_)!=str:
        date_=date_[0]
        
    print(date_)
    print(type(date_))

    if date_==b'':
        date_ = dt.datetime.today()
    else:
        date_ = dt.datetime.strptime(str(date_),"b'%b %d,%Y @ %H:%M:%s.%f'")

    week =  str(date_.isocalendar()[1])

    print('date,week:',date_,week,' \n ')
    
    return week


date_input_layer = tf.keras.layers.Input(shape=(1,),name='date_in',dtype=tf.string)
week_ = Lambda(lambda y: tf.py_function(week,[y],tf.string),name='week_')(date_input_layer)

numeric_input = tf.keras.layers.Input(shape=(1,dtype=tf.float32,name='numeric_in')
dense = Dense(1,input_dim=numeric_input.shape[1],activation='relu')(numeric_input)

model = Model(inputs=[date_input_layer,numeric_input],outputs=[dense,week_])

model.compile(loss=['mse',None],optimizer='adam')

history = model.fit(
    x=inputs,y=np.array([[2.0],[9.0],[16.0],[25.0]]),batch_size=1,epochs=2,)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)