Tensorflow 如何创建一个简单的模型来输出输入值的两倍?

Tensorflow 如何创建一个简单的模型来输出输入值的两倍?,tensorflow,machine-learning,keras,Tensorflow,Machine Learning,Keras,我是ML的新手,正在和一个模特搏斗 为了试图理解一个更大的模型有什么问题,我想创建一个简单的模型,其目标只是提供输入的双重值,但我甚至在这个简单的问题上都没有成功,因为模型可以编译,但无法学习 有人能帮我吗?我只是很沮丧,因为我不知道为什么这个简单的模型不能学习 import numpy as np from tensorflow.keras import Sequential, Model from tensorflow.keras.layers import Input, Dense x

我是ML的新手,正在和一个模特搏斗

为了试图理解一个更大的模型有什么问题,我想创建一个简单的模型,其目标只是提供输入的双重值,但我甚至在这个简单的问题上都没有成功,因为模型可以编译,但无法学习

有人能帮我吗?我只是很沮丧,因为我不知道为什么这个简单的模型不能学习

import numpy as np
from tensorflow.keras import Sequential, Model
from tensorflow.keras.layers import Input, Dense

x = [i for i in range(1, 21)]
y = [2 * i for i in range(1, 21)]
x = np.array(x)
y = np.array(y)

model = Sequential()
model.add(Input(shape=1))
model.add(Dense(units=1, activation='relu'))

model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
model.fit(x, y, shuffle=True, epochs=10, validation_data=(x, y))```

这是因为您使用了ReLU激活函数,该函数会导致参数的导数为0。线性激活函数可以解决这个问题。很合身:)

您还可以尝试以某种方式更改参数的初始值设定项

import numpy as np
from tensorflow.keras import Sequential, Model
from tensorflow.keras.layers import Input, Dense

x = [i for i in range(1, 21)]
y = [2 * i for i in range(1, 21)]
x = np.array(x)
y = np.array(y)

model = Sequential()
model.add(Input(shape=1))
model.add(Dense(units=1, activation=None))

model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
model.fit(x, y, shuffle=True, epochs=100, validation_data=(x, y))

这是因为您使用了ReLU激活函数,该函数会导致参数的导数为0。线性激活函数可以解决这个问题。很合身:)

您还可以尝试以某种方式更改参数的初始值设定项

import numpy as np
from tensorflow.keras import Sequential, Model
from tensorflow.keras.layers import Input, Dense

x = [i for i in range(1, 21)]
y = [2 * i for i in range(1, 21)]
x = np.array(x)
y = np.array(y)

model = Sequential()
model.add(Input(shape=1))
model.add(Dense(units=1, activation=None))

model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
model.fit(x, y, shuffle=True, epochs=100, validation_data=(x, y))


最佳实践问题属于意见问题,这意味着它们与SOi提到的损失函数无关,但我不是在问最好的问题。我只是想让模型学习。@GrandJ的描述听起来好像代码工作不正常(即“我甚至在这个简单的问题上都不能成功”),这会使文章偏离代码审查的主题。在指导那里的用户时,请让他们先阅读帮助中心的页面,如“”和“\S”。@Sᴀᴍ在…上ᴇᴌᴀ 我确实明白你在说什么,但他们直截了当地说:“有人能帮帮我吗?”?我不知道我是否使用了最好的激活和丢失函数来解决这个问题,但我只是想让模型学习一下。“因此,这将是一个代码审查问题。根据“帮助我”的声明,这似乎是最重要的方面。@TheGrandJ对不起,伙计,但这不是我想问的。这是我第一次在这么短的时间内提出要求。我将删除问题的这一部分。最佳实践问题属于意见问题,这意味着它们与SOi提到的损失函数无关,但我不是在问最好的问题。我只是想让模型学习。@GrandJ的描述听起来好像代码工作不正常(即“我甚至在这个简单的问题上都不能成功”),这会使文章偏离代码审查的主题。在指导那里的用户时,请让他们先阅读帮助中心的页面,如“”和“\S”。@Sᴀᴍ在…上ᴇᴌᴀ 我确实明白你在说什么,但他们直截了当地说:“有人能帮帮我吗?”?我不知道我是否使用了最好的激活和丢失函数来解决这个问题,但我只是想让模型学习一下。“因此,这将是一个代码审查问题。根据“帮助我”的声明,这似乎是最重要的方面。@TheGrandJ对不起,伙计,但这不是我想问的。这是我第一次在这么短的时间内提出要求。我要删除这部分问题。谢谢你的帮助,但我还是不明白。。。现在,通过ephocs,损耗正在减少,但精度没有提高,它只打印“精度:0.0000e+00”。你知道原因吗?@viniciusAbrantes因为这不是一个分类问题,准确度是不存在的。这是有道理的,非常感谢你@祝你学习英语好运!请将问题标记为已回答。谢谢你的帮助,但我仍然不明白。。。现在,通过ephocs,损耗正在减少,但精度没有提高,它只打印“精度:0.0000e+00”。你知道原因吗?@viniciusAbrantes因为这不是一个分类问题,准确度是不存在的。这是有道理的,非常感谢你@祝你学习英语好运!请将问题标记为已回答。