Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 机器学习预测-无法将NumPy数组转换为张量_Python_Tensorflow_Machine Learning_Word Embedding - Fatal编程技术网

Python 机器学习预测-无法将NumPy数组转换为张量

Python 机器学习预测-无法将NumPy数组转换为张量,python,tensorflow,machine-learning,word-embedding,Python,Tensorflow,Machine Learning,Word Embedding,我有一个电影评级预测的问题,我正试图解决我的个人机器学习实践。 我有2个csv文件。一个有电影(电影ID、标题、类型),另一个有收视率(用户ID、电影ID、收视率、时间戳) 在做了一些数据预处理之后,将单词嵌入应用于电影标题,并对流派进行了一次热编码,然后对我的最终数据帧进行洗牌 userId movieId rating embeddings genres 0 545 2020 5.0 [0.081246674, 0.046522498, -0.

我有一个电影评级预测的问题,我正试图解决我的个人机器学习实践。 我有2个csv文件。一个有电影(电影ID、标题、类型),另一个有收视率(用户ID、电影ID、收视率、时间戳)

在做了一些数据预处理之后,将单词嵌入应用于电影标题,并对流派进行了一次热编码,然后对我的最终数据帧进行洗牌

    userId  movieId     rating  embeddings  genres
0   545     2020    5.0     [0.081246674, 0.046522498, -0.014943261, 0.025...   [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...
1   427     3186    2.0     [0.09334839, 0.057055157, -0.020527517, 0.0301...   [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...
2   102     2144    3.0     [0.062349755, 0.04466611, -0.011009981, 0.0187...   [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
3   30      5927    4.0     [0.18021354, 0.119208135, -0.036116328, 0.0466...   [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, ...
4   537     1022    3.0     [0.026805451, 0.025356086, -0.004603084, 0.013...   [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, ...
...     ...     ...     ...     ...     ...
之后,我尝试将数据拆分为X和y,并应用列车测试拆分

X = df_ratings.drop(['rating'], axis=1).values
y = df_ratings['rating'].values
试图:

X = np.asarray(X).astype('float32')
y = np.asarray(y).astype('float32')

TypeError                                 Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-46-ee1241369db7> in <module>
----> 1 X = np.asarray(X).astype('float32')
      2 y = np.asarray(y).astype('float32')

ValueError: setting an array element with a sequence
我创建了我的模型(我不知道这是否完全正确),并尝试将我的列车数据拟合到模型中

def movies_model():
    model = Sequential()
    # Add layers
    model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
    model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(1, activation="linear"))
    return model

optimizer = tf.keras.optimizers.Adam()

model.compile(optimizer=optimizer, loss='mean_absolute_error')

history = model.fit(X_train, y_train, epochs=10, batch_size=1024, verbose=1)
我遇到了这个错误:

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).
嵌入和类型为numpy.ndarray类型

我寻找了一个提示,但没有结果。 如果你能帮我找出错误的来源,我将不胜感激。(我还尝试将嵌入和类型转换为其他类型)

df.info()


范围索引:100004个条目,0到100003
数据列(共5列):
#列非空计数数据类型
---  ------      --------------   -----  
0用户标识100004非空int64
1电影ID 100004非空int64
2额定值100004非零浮点64
3嵌入100004非空对象
4种类型100004非空对象
数据类型:float64(1)、int64(2)、object(2)

在分割数据之前,请尝试此操作

import numpy as np

X = np.asarray(X).astype(dtype=np.float32)
y = np.asarray(y).astype(dtype=np.float32)
编辑:

用额外的输入尺寸去除额外的致密层

def movies_model():
    model = Sequential()
    # Add layers
    model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(1, activation="linear"))
    return model

我也尝试过这个,但我得到了这个错误(添加在问题上)@kostas_math请包括在首字母上添加的错误question@kostas_math您还可以包括
X
y
的形状吗?是的,X:(100004,4),y:(100004,)张贴所有列的数据类型,其中所有列都是pandas.core.series.series。此外,每个嵌入值的类型为numpy.ndarray。我将在问题上添加一小部分。您可以使用df.info()查找问题上的数据类型。我认为您错误地将输入添加到了前两层。它必须仅位于第一层
import numpy as np

X = np.asarray(X).astype(dtype=np.float32)
y = np.asarray(y).astype(dtype=np.float32)
def movies_model():
    model = Sequential()
    # Add layers
    model.add(Dense(512, input_dim = X_train.shape[1], activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(1, activation="linear"))
    return model