- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将使用Python2.7和Keras 1.x的旧代码改编为Python3.7.3、Keras 2.2.4和TensorFlow 1.13.1。代码如下:
from keras.layers import Input, add, Dense, Flatten, concatenate
from keras import activations
from keras import models
from keras import backend as K
import numpy as np
import utils
from NGF.preprocessing import tensorise_smiles, tensorise_smiles_mp
from NGF.layers import NeuralGraphHidden, NeuralGraphOutput
from NGF.models import build_graph_conv_model
from NGF.sparse import GraphTensor, EpochIterator
# ==============================================================================
# ================================ Load the data ===============================
# ==============================================================================
print("{:=^100}".format(' Data preprocessing '))
data, labels = utils.load_delaney()
# Tensorise data
X_atoms, X_bonds, X_edges = tensorise_smiles_mp(data)
print('Atoms:', X_atoms.shape)
print('Bonds:', X_bonds.shape)
print('Edges:', X_edges.shape)
# Load sizes from data shape
num_molecules = X_atoms.shape[0]
max_atoms = X_atoms.shape[1]
max_degree = X_bonds.shape[2]
num_atom_features = X_atoms.shape[-1]
num_bond_features = X_bonds.shape[-1]
# ==============================================================================
# =============== Example 1: Building a 3-layer graph convnet =================
# ==============================================================================
print("{:=^100}".format(' Example 1 '))
# Parameters
conv_width = 8
fp_length = 62
# Define the input layers
atoms0 = Input(name='atom_inputs', shape=(max_atoms, num_atom_features))
bonds = Input(name='bond_inputs', shape=(max_atoms, max_degree, num_bond_features))
edges = Input(name='edge_inputs', shape=(max_atoms, max_degree), dtype='int32')
print("DEBUG: edges=", K.print_tensor(edges))
# Define the convoluted atom feature layers
atoms1 = NeuralGraphHidden(conv_width, activation='relu', use_bias=False)([atoms0, bonds, edges])
atoms2 = NeuralGraphHidden(conv_width, activation='relu', use_bias=False)([atoms1, bonds, edges])
# Define the outputs of each (convoluted) atom feature layer to fingerprint
fp_out0 = NeuralGraphOutput(fp_length, activation='softmax')([atoms0, bonds, edges])
fp_out1 = NeuralGraphOutput(fp_length, activation='softmax')([atoms1, bonds, edges])
fp_out2 = NeuralGraphOutput(fp_length, activation='softmax')([atoms2, bonds, edges])
# Flatten the input before the Dense layer by summing the 3 outputs to obtain fingerprint
# final_fp = merge([fp_out0, fp_out1, fp_out2], mode='sum') # Old Keras 1.x syntax
print("DEBUG: fp_out0.get_shape()=", fp_out0.get_shape())
print("DEBUG: fp_out1.get_shape()=", fp_out1.get_shape())
print("DEBUG: fp_out2.get_shape()=", fp_out2.get_shape())
# final_fp = add([fp_out0, fp_out1, fp_out2])
final_fp = concatenate([fp_out0, fp_out1, fp_out2])
print("DEBUG: final_fp.get_shape()=", final_fp.get_shape())
# Build and compile model for regression.
main_pred = Dense(1, activation='linear', name='main_prediction')(final_fp)
print("DEBUG: main_pred.get_shape()=", main_pred.get_shape())
model = models.Model(inputs=[atoms0, bonds, edges], outputs=[main_pred])
model.compile(optimizer='adagrad', loss='mse')
# Show summary
model.summary()
# Train the model
print("DEBUG: labels.shape", labels.shape)
model.fit(x=[X_atoms, X_bonds, X_edges], y=labels, epochs=20, batch_size=32, validation_split=0.2)
本质上,它是一个定制的卷积神经网络,它采用 3 个不同的可变维度数组作为输入并返回标量预测。这是我执行时的输出:
======================================== Data preprocessing ========================================
Tensorising molecules in batches...
1128/1128 [==================================================] - 1s 740us/step
Merging batch tensors... [DONE]
Atoms: (1128, 55, 62)
Bonds: (1128, 55, 5, 6)
Edges: (1128, 55, 5)
============================================ Example 1 =============================================
DEBUG: edges= Tensor("Print:0", shape=(?, 55, 5), dtype=int32)
DEBUG: fp_out0.get_shape()= (?, 62)
DEBUG: fp_out1.get_shape()= (?, 62)
DEBUG: fp_out2.get_shape()= (?, 62)
DEBUG: final_fp.get_shape()= (?, 186)
DEBUG: main_pred.get_shape()= (?, 1)
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
atom_inputs (InputLayer) (None, 55, 62) 0
__________________________________________________________________________________________________
bond_inputs (InputLayer) (None, 55, 5, 6) 0
__________________________________________________________________________________________________
edge_inputs (InputLayer) (None, 55, 5) 0
__________________________________________________________________________________________________
neural_graph_hidden_1 (NeuralGr [(None, 55, 62), (No 2720 atom_inputs[0][0]
bond_inputs[0][0]
edge_inputs[0][0]
__________________________________________________________________________________________________
neural_graph_hidden_2 (NeuralGr [(None, 55, 62), (No 2720 neural_graph_hidden_1[0][0]
bond_inputs[0][0]
edge_inputs[0][0]
__________________________________________________________________________________________________
neural_graph_output_1 (NeuralGr [(None, 55, 62), (No 4278 atom_inputs[0][0]
bond_inputs[0][0]
edge_inputs[0][0]
__________________________________________________________________________________________________
neural_graph_output_2 (NeuralGr [(None, 55, 62), (No 4278 neural_graph_hidden_1[0][0]
bond_inputs[0][0]
edge_inputs[0][0]
__________________________________________________________________________________________________
neural_graph_output_3 (NeuralGr [(None, 55, 62), (No 4278 neural_graph_hidden_2[0][0]
bond_inputs[0][0]
edge_inputs[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 55, 186) 0 neural_graph_output_1[0][0]
neural_graph_output_2[0][0]
neural_graph_output_3[0][0]
__________________________________________________________________________________________________
main_prediction (Dense) (None, 55, 1) 187 concatenate_1[0][0]
==================================================================================================
Total params: 18,461
Trainable params: 18,461
Non-trainable params: 0
__________________________________________________________________________________________________
DEBUG: labels.shape (1128,)
Traceback (most recent call last):
File "/home/thomas/Programs/Anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3296, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-9a41784534dc>", line 1, in <module>
runfile('/home2/thomas/Programs/keras-neural-graph-fingerprint_Py3/examples.py', wdir='/home2/thomas/Programs/keras-neural-graph-fingerprint_Py3')
File "/home2/thomas/Programs/pycharm-2019.1.1/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "/home2/thomas/Programs/pycharm-2019.1.1/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home2/thomas/Programs/keras-neural-graph-fingerprint_Py3/examples.py", line 80, in <module>
model.fit(x=[X_atoms, X_bonds, X_edges], y=labels, epochs=20, batch_size=32, validation_split=0.2)
File "/home/thomas/Programs/Anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 952, in fit
batch_size=batch_size)
File "/home/thomas/Programs/Anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 789, in _standardize_user_data
exception_prefix='target')
File "/home/thomas/Programs/Anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data
'with shape ' + str(data_shape))
ValueError: Error when checking target: expected main_prediction to have 3 dimensions, but got array with shape (1128, 1)
我怀疑此错误与“标签”数组的形状有关,该数组是扁平的。我究竟做错了什么?另外,为什么我会得到
DEBUG: final_fp.get_shape()= (?, 186)
但是 model.summary() 显示
concatenate_1 (Concatenate) (None, 55, 186) 0
这个额外的维度 (55) 从哪里来?也许网络出于某种原因期望标签具有尺寸 (1128, 55, 1)
而不是(1128, 1)
.
如果您需要更多信息,请询问我,我将添加更多调试打印功能。
最佳答案
你的最后一个密集层main_predictions
没有给出二维输出,因为你没有压平它的输入。
You need to use a
Flatten
layer after Convolution layers so that the output of theDense
is 2 dimensional.
main_predictions
需要 3D 标签,但您为其提供 2D 标签。因此,您会收到错误。
您可以在代码中添加 Flatten 层,如下所示:
flatten = Flatten()( final_fp )
main_pred = Dense(1, activation='linear', name='main_prediction')( flatten )
然后编译模型。
关于python - ValueError:检查目标时出错:预期 main_prediction 有 3 个维度,但得到形状为 (1128, 1) 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786512/
我想使用批处理从文件夹中读取图像。但是解码后,当我使用tf.train.batch时可能会出现一些问题。这是代码。 def get_batch(image, label, batch_size, ca
我正在使用 tf.unsorted_segment_sum TensorFlow 的方法,当我作为数据给出的张量只有一行时,它工作正常。例如: tf.unsorted_segment_sum(tf.c
我想创建一个正则表达式来检查有效维度JavaScript 中的长度 x 宽度 x 高度。 例如90.49 x 34.93 x 40.64 我打算使用的示例代码: var dimensionRegex
ViewPager 是否必须是 Activity 布局中唯一存在的对象?我正在尝试实现这样的东西: 我应该在什么地方有一个大的寻呼机在顶部滚动(我有)和一个较小的画廊在它下面滚动。这只向我显示寻
据我所知,(维度、维度属性和事实)差异的最佳示例如下所示: 维度 - 产品、帐户、客户 维度属性 - ProductName、ProductNumber、CustomerName、CustomerNu
我是 Numpy 的新手,正在尝试理解什么是维度的基本问题, 我尝试了以下命令并试图理解为什么最后两个数组的 ndim 相同? >>> a= array([1,2,3]) >>> a.ndim 1 >
我对 MDX 比较陌生,正在尝试完成我认为应该很容易的事情,但我还没有找到任何解决方案。 我有一个销售立方体,其中一个衡量标准是利润,它可以是负数也可以是正数。我想得到一个有效的正利润总和的度量,即只
在大多数情况下,维度内层次结构的每个级别代表不同的概念(即国家->地区->城市、年->月->日),这很简单,可以在多维数据集中使用。 我感兴趣的是可变深度层次结构,它往往由相同概念的实例组成,即计算机
我正在尝试创建一个方法来总结潜在的项目并从数组返回该总和。以下是一些预期的示例输入: arraySum(new int[10]); // 10 arraySum(new int[2][5]); //
我正在尝试初始化一个二维数组(我创建的类对象),但我仍然遇到相同的运行时错误: Exception in thread "main" java.lang.NullPoointerException
(我是一名学生,这是我第一次发帖,所以请放轻松。)我想创建一个将二维数组作为参数的函数,并且在该数组中,我想要一个变量,稍后我想在代码中对其进行修改。这是最接近我想要的例子的东西: int size;
我想我可能会问一个虚拟问题,但我对 Android 编程还是个新手,而且我无法(尽管我付出了所有努力)在 Google 上找到我的答案。 问题是,我正在尝试使用 2D 图形开发一个小游戏。我希望我的“
如何使用 Crossfilter 过滤一系列日期?当我知道该时间段之间存在事实记录时,以下内容不起作用。 Var myDimension = CrossFilterObj.dimension(func
我正在启动另一个应用程序并设置其主要 HWND 位置和大小。我正在使用 STARTUPINFO指定窗口尺寸的标志,但看起来只有在新进程使用 CW_USEDEFAULT 时才会遵循这些尺寸在其 Crea
我正在尝试使用 Keras 构建我的第一个神经网络。我的经验为零,我似乎无法弄清楚为什么我的维度不对。我无法从他们的文档中弄清楚这个错误在提示什么,甚至是什么层导致了它。 我的模型接受一个 32 字节
我有一个水平导航栏,我的 a 元素没有扩展到父 li 元素的宽度和高度。 如何修改我的 CSS,使 a 元素与外部/父级 li 元素一样宽和高?
如何只更改需要 Dimension 对象的组件的宽度或高度?目前我是这样做的: jbutton.setPreferredSize(new Dimension(button.getPreferredSi
哪些 OLAP 工具支持动态、动态地创建维度或层次结构? 例如,层次结构将成员定义为:“前 5 名”、“前 6-10 名”、“其他”... 计算成员是通常的答案,我正在寻找不同的东西。计算器的问题。成
我使用 1 个 div 元素为我的网站制作 .background 。它的高度将是 100%。为了实现这一点,我使用 jQuery 尺寸实用程序。 用这个脚本来获取高度 $('.background
MultiArray与使用 std::vector 创建多数组相比,在 boost 中有很多优势。但是,我对 BOOST 中的 MultiArray 感到不舒服的一件事是创建一个可以轻松更改其大小的多
我是一名优秀的程序员,十分优秀!