我怎样才能让我的模型接受 2 个张量作为输入。我尝试过使用合并层,但我没有完全让它发挥作用

问题描述 投票:0回答:2

制作训练数据

import random
import numpy as np


x_train = []
x1_train = []
y_train = []
atoms = [0,1]
p = [0.6,0.4]
for i in range(1000):
    x_train.append([np.random.choice(atoms, p=p),np.random.choice(atoms, p=p)])
for i in range(1000):
    x1_train.append([np.random.choice(atoms, p=p),np.random.choice(atoms, p=p)])
for i in x_train:
    if 1 in i:
        y_train.append([1])
    else:
        y_train.append([0])

转换为 numpy 数组以使它们可以被 keras 使用

x_train = np.array(x_train)
x1_train = np.array(x_train)
y_train = np.array(y_train)
import tensorflow as tf

对数据进行归一化,让模型更好的使用

x_train = tf.keras.utils.normalize(x_train, axis = 1)
x1_train = tf.keras.utils.normalize(x_train, axis = 1)
y_train = tf.keras.utils.normalize(y_train, axis = 0)

制作具有密集层的模型

model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128 , activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))

model.add(tf.keras.layers.Dense(1, activation = tf.nn.sigmoid))

在 3 个列表上编译和训练模型

model.compile(optimizer='adam',
              loss='mean_absolute_percentage_error',
              metrics=['accuracy'])
model.fit(x_train, x1_train, y_train, epochs = 10)
python tensorflow machine-learning keras deep-learning
2个回答
0
投票

试试这个

from keras.layers import Input, Dense
from keras.models import Model
import keras

inputs1 = Input(shape=(784,))
inputs2 = Input(shape=(784,))

outputs_1 = Dense(64, activation='relu')(inputs1)
outputs_2 = Dense(64, activation='relu')(inputs2)

outputs = keras.layers.Concatenate([outputs_1, outputs_2])

predictions = Dense(10, activation='softmax')(outputs)

model = Model(inputs=[inputs1,inputs2], outputs=predictions)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit([data1, data2], labels)

0
投票

@irishabha 的上述回答给出了以下错误:

Traceback (most recent call last): File "...\main.py", line 20, in <module> predictions = Dense(10, activation='softmax')(outputs) File "...\Python\Python310\lib\site-packages\keras\src\utils\traceback_utils.py", line 123, in error_handler raise e.with_traceback(filtered_tb) from None File "...\Python\Python310\lib\site-packages\keras\src\layers\layer.py", line 738, in __call__ raise ValueError( ValueError: Only input tensors may be passed as positional arguments. The following argument value should be passed as a keyword argument: <Concatenate name=concatenate, built=False> (of type <class 'keras.src.layers.merging.concatenate.Concatenate'>)

© www.soinside.com 2019 - 2024. All rights reserved.